Skip to content

Commit fd8f990

Browse files
committed
Fix instantiation of alias type arguments for deferred type references
1 parent 842c588 commit fd8f990

File tree

1 file changed

+6
-10
lines changed

1 file changed

+6
-10
lines changed

src/compiler/checker.ts

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -9115,13 +9115,15 @@ namespace ts {
91159115
return type;
91169116
}
91179117

9118-
function createDeferredTypeReference(target: GenericType, node: ArrayTypeNode | TupleTypeNode, mapper?: TypeMapper, aliasSymbol?: Symbol, aliasTypeArguments?: ReadonlyArray<Type>): DeferredTypeReference {
9118+
function createDeferredTypeReference(target: GenericType, node: ArrayTypeNode | TupleTypeNode, mapper?: TypeMapper): DeferredTypeReference {
9119+
const aliasSymbol = getAliasSymbolForTypeNode(node);
9120+
const aliasTypeArguments = getTypeArgumentsForAliasSymbol(aliasSymbol);
91199121
const type = <DeferredTypeReference>createObjectType(ObjectFlags.Reference, target.symbol);
91209122
type.target = target;
91219123
type.node = node;
91229124
type.mapper = mapper;
91239125
type.aliasSymbol = aliasSymbol;
9124-
type.aliasTypeArguments = aliasTypeArguments;
9126+
type.aliasTypeArguments = mapper ? instantiateTypes(aliasTypeArguments, mapper) : aliasTypeArguments;
91259127
return type;
91269128
}
91279129

@@ -9639,10 +9641,8 @@ namespace ts {
96399641
links.resolvedType = emptyObjectType;
96409642
}
96419643
else if (isAliasedType(node)) {
9642-
const aliasSymbol = getAliasSymbolForTypeNode(node);
9643-
const aliasTypeArguments = getTypeArgumentsForAliasSymbol(aliasSymbol);
96449644
links.resolvedType = node.kind === SyntaxKind.TupleType && node.elementTypes.length === 0 ? target :
9645-
createDeferredTypeReference(target, node, /*mapper*/ undefined, aliasSymbol, aliasTypeArguments);
9645+
createDeferredTypeReference(target, node, /*mapper*/ undefined);
96469646
}
96479647
else {
96489648
const elementTypes = node.kind === SyntaxKind.ArrayType ? [getTypeFromTypeNode(node.elementType)] : map(node.elementTypes, getTypeFromTypeNode);
@@ -11504,7 +11504,7 @@ namespace ts {
1150411504
let result = links.instantiations!.get(id);
1150511505
if (!result) {
1150611506
const newMapper = createTypeMapper(typeParameters, typeArguments);
11507-
result = target.objectFlags & ObjectFlags.Reference ? instantiateDeferredTypeReference(<DeferredTypeReference>type, newMapper) :
11507+
result = target.objectFlags & ObjectFlags.Reference ? createDeferredTypeReference((<DeferredTypeReference>type).target, (<DeferredTypeReference>type).node, newMapper) :
1150811508
target.objectFlags & ObjectFlags.Mapped ? instantiateMappedType(<MappedType>target, newMapper) :
1150911509
instantiateAnonymousType(target, newMapper);
1151011510
links.instantiations!.set(id, result);
@@ -11638,10 +11638,6 @@ namespace ts {
1163811638
return result;
1163911639
}
1164011640

11641-
function instantiateDeferredTypeReference(type: DeferredTypeReference, mapper: TypeMapper): TypeReference {
11642-
return createDeferredTypeReference(type.target, type.node, mapper, type.aliasSymbol, instantiateTypes(type.aliasTypeArguments, mapper));
11643-
}
11644-
1164511641
function getConditionalTypeInstantiation(type: ConditionalType, mapper: TypeMapper): Type {
1164611642
const root = type.root;
1164711643
if (root.outerTypeParameters) {

0 commit comments

Comments
 (0)