@@ -12361,15 +12361,18 @@ namespace ts {
1236112361 return type;
1236212362 }
1236312363
12364- function createDeferredTypeReference(target: GenericType, node: TypeReferenceNode | ArrayTypeNode | TupleTypeNode, mapper?: TypeMapper): DeferredTypeReference {
12365- const aliasSymbol = getAliasSymbolForTypeNode(node);
12366- const aliasTypeArguments = getTypeArgumentsForAliasSymbol(aliasSymbol);
12364+ function createDeferredTypeReference(target: GenericType, node: TypeReferenceNode | ArrayTypeNode | TupleTypeNode, mapper?: TypeMapper, aliasSymbol?: Symbol, aliasTypeArguments?: readonly Type[]): DeferredTypeReference {
12365+ if (!aliasSymbol) {
12366+ aliasSymbol = getAliasSymbolForTypeNode(node);
12367+ const localAliasTypeArguments = getTypeArgumentsForAliasSymbol(aliasSymbol);
12368+ aliasTypeArguments = mapper ? instantiateTypes(localAliasTypeArguments, mapper) : localAliasTypeArguments;
12369+ }
1236712370 const type = <DeferredTypeReference>createObjectType(ObjectFlags.Reference, target.symbol);
1236812371 type.target = target;
1236912372 type.node = node;
1237012373 type.mapper = mapper;
1237112374 type.aliasSymbol = aliasSymbol;
12372- type.aliasTypeArguments = mapper ? instantiateTypes(aliasTypeArguments, mapper) : aliasTypeArguments;
12375+ type.aliasTypeArguments = aliasTypeArguments;
1237312376 return type;
1237412377 }
1237512378
@@ -15460,17 +15463,19 @@ namespace ts {
1546015463 // instantiation cache key from the type IDs of the type arguments.
1546115464 const combinedMapper = combineTypeMappers(type.mapper, mapper);
1546215465 const typeArguments = map(typeParameters, t => getMappedType(t, combinedMapper));
15463- const id = getTypeListId(typeArguments) + (aliasSymbol ? `@${getSymbolId(aliasSymbol)}` : "");
15466+ const newAliasSymbol = aliasSymbol || type.aliasSymbol;
15467+ const id = getTypeListId(typeArguments) + (newAliasSymbol ? `@${getSymbolId(newAliasSymbol)}` : "");
1546415468 if (!target.instantiations) {
1546515469 target.instantiations = new Map<string, Type>();
15466- target.instantiations.set(getTypeListId(typeParameters), target);
15470+ target.instantiations.set(getTypeListId(typeParameters) + (target.aliasSymbol ? `@${getSymbolId(target.aliasSymbol)}` : "") , target);
1546715471 }
1546815472 let result = target.instantiations.get(id);
1546915473 if (!result) {
1547015474 const newMapper = createTypeMapper(typeParameters, typeArguments);
15471- result = target.objectFlags & ObjectFlags.Reference ? createDeferredTypeReference((<DeferredTypeReference>type).target, (<DeferredTypeReference>type).node, newMapper) :
15472- target.objectFlags & ObjectFlags.Mapped ? instantiateMappedType(<MappedType>target, newMapper, aliasSymbol, aliasTypeArguments) :
15473- instantiateAnonymousType(target, newMapper, aliasSymbol, aliasTypeArguments);
15475+ const newAliasTypeArguments = aliasSymbol ? aliasTypeArguments : instantiateTypes(type.aliasTypeArguments, mapper);
15476+ result = target.objectFlags & ObjectFlags.Reference ? createDeferredTypeReference((<DeferredTypeReference>type).target, (<DeferredTypeReference>type).node, newMapper, newAliasSymbol, newAliasTypeArguments) :
15477+ target.objectFlags & ObjectFlags.Mapped ? instantiateMappedType(<MappedType>target, newMapper, newAliasSymbol, newAliasTypeArguments) :
15478+ instantiateAnonymousType(target, newMapper, newAliasSymbol, newAliasTypeArguments);
1547415479 target.instantiations.set(id, result);
1547515480 }
1547615481 return result;
@@ -15694,15 +15699,12 @@ namespace ts {
1569415699 }
1569515700 if (flags & TypeFlags.Object) {
1569615701 const objectFlags = (<ObjectType>type).objectFlags;
15697- if (objectFlags & ObjectFlags.Reference) {
15698- if ((<TypeReference>type).node) {
15699- return getObjectTypeInstantiation(<TypeReference | AnonymousType | MappedType>type, mapper);
15702+ if (objectFlags & (ObjectFlags.Reference | ObjectFlags.Anonymous | ObjectFlags.Mapped)) {
15703+ if (objectFlags & ObjectFlags.Reference && !(<TypeReference>type).node) {
15704+ const resolvedTypeArguments = (<TypeReference>type).resolvedTypeArguments;
15705+ const newTypeArguments = instantiateTypes(resolvedTypeArguments, mapper);
15706+ return newTypeArguments !== resolvedTypeArguments ? createNormalizedTypeReference((<TypeReference>type).target, newTypeArguments) : type;
1570015707 }
15701- const resolvedTypeArguments = (<TypeReference>type).resolvedTypeArguments;
15702- const newTypeArguments = instantiateTypes(resolvedTypeArguments, mapper);
15703- return newTypeArguments !== resolvedTypeArguments ? createNormalizedTypeReference((<TypeReference>type).target, newTypeArguments) : type;
15704- }
15705- if (objectFlags & (ObjectFlags.Anonymous | ObjectFlags.Mapped)) {
1570615708 return getObjectTypeInstantiation(<TypeReference | AnonymousType | MappedType>type, mapper, aliasSymbol, aliasTypeArguments);
1570715709 }
1570815710 return type;
0 commit comments