Skip to content

Commit b6c708d

Browse files
authored
Merge pull request #18207 from Microsoft/recursive-type-reference-cache
Expand type references recursively in cache key
2 parents 1edecac + 2fc14d8 commit b6c708d

File tree

1 file changed

+6
-3
lines changed

1 file changed

+6
-3
lines changed

src/compiler/checker.ts

+6-3
Original file line numberDiff line numberDiff line change
@@ -9781,15 +9781,15 @@ namespace ts {
97819781
return type.flags & TypeFlags.TypeParameter && !getConstraintFromTypeParameter(<TypeParameter>type);
97829782
}
97839783

9784-
function isTypeReferenceWithGenericArguments(type: Type) {
9785-
return getObjectFlags(type) & ObjectFlags.Reference && some((<TypeReference>type).typeArguments, isUnconstrainedTypeParameter);
9784+
function isTypeReferenceWithGenericArguments(type: Type): boolean {
9785+
return getObjectFlags(type) & ObjectFlags.Reference && some((<TypeReference>type).typeArguments, t => isUnconstrainedTypeParameter(t) || isTypeReferenceWithGenericArguments(t));
97869786
}
97879787

97889788
/**
97899789
* getTypeReferenceId(A<T, number, U>) returns "111=0-12=1"
97909790
* where A.id=111 and number.id=12
97919791
*/
9792-
function getTypeReferenceId(type: TypeReference, typeParameters: Type[]) {
9792+
function getTypeReferenceId(type: TypeReference, typeParameters: Type[], depth = 0) {
97939793
let result = "" + type.target.id;
97949794
for (const t of type.typeArguments) {
97959795
if (isUnconstrainedTypeParameter(t)) {
@@ -9800,6 +9800,9 @@ namespace ts {
98009800
}
98019801
result += "=" + index;
98029802
}
9803+
else if (depth < 4 && isTypeReferenceWithGenericArguments(t)) {
9804+
result += "<" + getTypeReferenceId(t as TypeReference, typeParameters, depth + 1) + ">";
9805+
}
98039806
else {
98049807
result += "-" + t.id;
98059808
}

0 commit comments

Comments
 (0)