diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 269666d7b94..22abe7cd57e 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -9782,8 +9782,8 @@ namespace ts { return type.flags & TypeFlags.TypeParameter && !getConstraintFromTypeParameter(type); } - function isTypeReferenceWithGenericArguments(type: Type) { - return getObjectFlags(type) & ObjectFlags.Reference && some((type).typeArguments, isUnconstrainedTypeParameter); + function isTypeReferenceWithGenericArguments(type: Type): type is TypeReference { + return getObjectFlags(type) & ObjectFlags.Reference && some((type).typeArguments, t => isUnconstrainedTypeParameter(t) || isTypeReferenceWithGenericArguments(t)); } /** @@ -9801,6 +9801,9 @@ namespace ts { } result += "=" + index; } + else if (isTypeReferenceWithGenericArguments(t)) { + result += "<" + getTypeReferenceId(t, typeParameters) + ">"; + } else { result += "-" + t.id; } @@ -10050,7 +10053,7 @@ namespace ts { getUnionType(types, /*subtypeReduction*/ true); } - function isArrayType(type: Type): boolean { + function isArrayType(type: Type): type is TypeReference { return getObjectFlags(type) & ObjectFlags.Reference && (type).target === globalArrayType; }