Skip to content

Commit da7f11f

Browse files
committed
Properly instantiate aliasTypeArguments
1 parent ed4fead commit da7f11f

File tree

2 files changed

+16
-10
lines changed

2 files changed

+16
-10
lines changed

src/compiler/checker.ts

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4164,8 +4164,8 @@ namespace ts {
41644164
else {
41654165
mapper = createTypeMapper(typeParameters, typeArguments);
41664166
members = createInstantiatedSymbolTable(source.declaredProperties, mapper, /*mappingThisOnly*/ typeParameters.length === 1);
4167-
callSignatures = instantiateList(source.declaredCallSignatures, mapper, instantiateSignature);
4168-
constructSignatures = instantiateList(source.declaredConstructSignatures, mapper, instantiateSignature);
4167+
callSignatures = instantiateSignatures(source.declaredCallSignatures, mapper);
4168+
constructSignatures = instantiateSignatures(source.declaredConstructSignatures, mapper);
41694169
stringIndexInfo = instantiateIndexInfo(source.declaredStringIndexInfo, mapper);
41704170
numberIndexInfo = instantiateIndexInfo(source.declaredNumberIndexInfo, mapper);
41714171
}
@@ -4363,8 +4363,8 @@ namespace ts {
43634363
const symbol = type.symbol;
43644364
if (type.target) {
43654365
const members = createInstantiatedSymbolTable(getPropertiesOfObjectType(type.target), type.mapper, /*mappingThisOnly*/ false);
4366-
const callSignatures = instantiateList(getSignaturesOfType(type.target, SignatureKind.Call), type.mapper, instantiateSignature);
4367-
const constructSignatures = instantiateList(getSignaturesOfType(type.target, SignatureKind.Construct), type.mapper, instantiateSignature);
4366+
const callSignatures = instantiateSignatures(getSignaturesOfType(type.target, SignatureKind.Call), type.mapper);
4367+
const constructSignatures = instantiateSignatures(getSignaturesOfType(type.target, SignatureKind.Construct), type.mapper);
43684368
const stringIndexInfo = instantiateIndexInfo(getIndexInfoOfType(type.target, IndexKind.String), type.mapper);
43694369
const numberIndexInfo = instantiateIndexInfo(getIndexInfoOfType(type.target, IndexKind.Number), type.mapper);
43704370
setStructuredTypeMembers(type, members, callSignatures, constructSignatures, stringIndexInfo, numberIndexInfo);
@@ -6037,6 +6037,14 @@ namespace ts {
60376037
return items;
60386038
}
60396039

6040+
function instantiateTypes(types: Type[], mapper: TypeMapper) {
6041+
return instantiateList(types, mapper, instantiateType);
6042+
}
6043+
6044+
function instantiateSignatures(signatures: Signature[], mapper: TypeMapper) {
6045+
return instantiateList(signatures, mapper, instantiateSignature);
6046+
}
6047+
60406048
function createUnaryTypeMapper(source: Type, target: Type): TypeMapper {
60416049
return t => t === source ? target : t;
60426050
}
@@ -6063,7 +6071,6 @@ namespace ts {
60636071
count == 2 ? createBinaryTypeMapper(sources[0], targets ? targets[0] : anyType, sources[1], targets ? targets[1] : anyType) :
60646072
createArrayTypeMapper(sources, targets);
60656073
mapper.mappedTypes = sources;
6066-
mapper.targetTypes = targets;
60676074
return mapper;
60686075
}
60696076

@@ -6190,7 +6197,7 @@ namespace ts {
61906197
result.target = type;
61916198
result.mapper = mapper;
61926199
result.aliasSymbol = type.aliasSymbol;
6193-
result.aliasTypeArguments = mapper.targetTypes;
6200+
result.aliasTypeArguments = instantiateTypes(type.aliasTypeArguments, mapper);
61946201
mapper.instantiations[type.id] = result;
61956202
return result;
61966203
}
@@ -6266,14 +6273,14 @@ namespace ts {
62666273
instantiateAnonymousType(<AnonymousType>type, mapper) : type;
62676274
}
62686275
if ((<ObjectType>type).objectFlags & ObjectFlags.Reference) {
6269-
return createTypeReference((<TypeReference>type).target, instantiateList((<TypeReference>type).typeArguments, mapper, instantiateType));
6276+
return createTypeReference((<TypeReference>type).target, instantiateTypes((<TypeReference>type).typeArguments, mapper));
62706277
}
62716278
}
62726279
if (type.flags & TypeFlags.Union && !(type.flags & TypeFlags.Primitive)) {
6273-
return getUnionType(instantiateList((<UnionType>type).types, mapper, instantiateType), /*subtypeReduction*/ false, type.aliasSymbol, mapper.targetTypes);
6280+
return getUnionType(instantiateTypes((<UnionType>type).types, mapper), /*subtypeReduction*/ false, type.aliasSymbol, instantiateTypes(type.aliasTypeArguments, mapper));
62746281
}
62756282
if (type.flags & TypeFlags.Intersection) {
6276-
return getIntersectionType(instantiateList((<IntersectionType>type).types, mapper, instantiateType), type.aliasSymbol, mapper.targetTypes);
6283+
return getIntersectionType(instantiateTypes((<IntersectionType>type).types, mapper), type.aliasSymbol, instantiateTypes(type.aliasTypeArguments, mapper));
62776284
}
62786285
if (type.flags & TypeFlags.Index) {
62796286
return getIndexType(instantiateType((<IndexType>type).type, mapper));

src/compiler/types.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2940,7 +2940,6 @@ namespace ts {
29402940
export interface TypeMapper {
29412941
(t: TypeParameter): Type;
29422942
mappedTypes?: Type[]; // Types mapped by this mapper
2943-
targetTypes?: Type[]; // Types substituted for mapped types
29442943
instantiations?: Type[]; // Cache of instantiations created using this type mapper.
29452944
context?: InferenceContext; // The inference context this mapper was created from.
29462945
// Only inference mappers have this set (in createInferenceMapper).

0 commit comments

Comments
 (0)