From c9d081eed49aa1e8cb5d33feabf9a3714cdd10a4 Mon Sep 17 00:00:00 2001 From: Nathan Shively-Sanders Date: Fri, 1 Sep 2017 09:55:38 -0700 Subject: [PATCH] Expand type references recursively in cache key This means that `A>>` will include the keys for `B` and `C` now. --- src/compiler/checker.ts | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) 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; }