@@ -2229,14 +2229,8 @@ namespace ts {
22292229 // The specified symbol flags need to be reinterpreted as type flags
22302230 buildSymbolDisplay(type.symbol, writer, enclosingDeclaration, SymbolFlags.Type, SymbolFormatFlags.None, nextFlags);
22312231 }
2232- else if (!(flags & TypeFormatFlags.InTypeAlias) && (( getObjectFlags(type) & ObjectFlags.Anonymous && !(<AnonymousType>type).target) || type.flags & TypeFlags.UnionOrIntersection) && type.aliasSymbol &&
2232+ else if (!(flags & TypeFormatFlags.InTypeAlias) && (getObjectFlags(type) & ObjectFlags.Anonymous || type.flags & TypeFlags.UnionOrIntersection) && type.aliasSymbol &&
22332233 isSymbolAccessible(type.aliasSymbol, enclosingDeclaration, SymbolFlags.Type, /*shouldComputeAliasesToMakeVisible*/ false).accessibility === SymbolAccessibility.Accessible) {
2234- // We emit inferred type as type-alias at the current localtion if all the following is true
2235- // the input type is has alias symbol that is accessible
2236- // the input type is a union, intersection or anonymous type that is fully instantiated (if not we want to keep dive into)
2237- // e.g.: export type Bar<X, Y> = () => [X, Y];
2238- // export type Foo<Y> = Bar<any, Y>;
2239- // export const y = (x: Foo<string>) => 1 // we want to emit as ...x: () => [any, string])
22402234 const typeArguments = type.aliasTypeArguments;
22412235 writeSymbolTypeReference(type.aliasSymbol, typeArguments, 0, typeArguments ? typeArguments.length : 0, nextFlags);
22422236 }
@@ -4164,8 +4158,8 @@ namespace ts {
41644158 else {
41654159 mapper = createTypeMapper(typeParameters, typeArguments);
41664160 members = createInstantiatedSymbolTable(source.declaredProperties, mapper, /*mappingThisOnly*/ typeParameters.length === 1);
4167- callSignatures = instantiateList (source.declaredCallSignatures, mapper, instantiateSignature );
4168- constructSignatures = instantiateList (source.declaredConstructSignatures, mapper, instantiateSignature );
4161+ callSignatures = instantiateSignatures (source.declaredCallSignatures, mapper);
4162+ constructSignatures = instantiateSignatures (source.declaredConstructSignatures, mapper);
41694163 stringIndexInfo = instantiateIndexInfo(source.declaredStringIndexInfo, mapper);
41704164 numberIndexInfo = instantiateIndexInfo(source.declaredNumberIndexInfo, mapper);
41714165 }
@@ -4363,8 +4357,8 @@ namespace ts {
43634357 const symbol = type.symbol;
43644358 if (type.target) {
43654359 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 );
4360+ const callSignatures = instantiateSignatures (getSignaturesOfType(type.target, SignatureKind.Call), type.mapper);
4361+ const constructSignatures = instantiateSignatures (getSignaturesOfType(type.target, SignatureKind.Construct), type.mapper);
43684362 const stringIndexInfo = instantiateIndexInfo(getIndexInfoOfType(type.target, IndexKind.String), type.mapper);
43694363 const numberIndexInfo = instantiateIndexInfo(getIndexInfoOfType(type.target, IndexKind.Number), type.mapper);
43704364 setStructuredTypeMembers(type, members, callSignatures, constructSignatures, stringIndexInfo, numberIndexInfo);
@@ -6043,6 +6037,14 @@ namespace ts {
60436037 return items;
60446038 }
60456039
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+
60466048 function createUnaryTypeMapper(source: Type, target: Type): TypeMapper {
60476049 return t => t === source ? target : t;
60486050 }
@@ -6069,7 +6071,6 @@ namespace ts {
60696071 count == 2 ? createBinaryTypeMapper(sources[0], targets ? targets[0] : anyType, sources[1], targets ? targets[1] : anyType) :
60706072 createArrayTypeMapper(sources, targets);
60716073 mapper.mappedTypes = sources;
6072- mapper.targetTypes = targets;
60736074 return mapper;
60746075 }
60756076
@@ -6196,7 +6197,7 @@ namespace ts {
61966197 result.target = type;
61976198 result.mapper = mapper;
61986199 result.aliasSymbol = type.aliasSymbol;
6199- result.aliasTypeArguments = mapper.targetTypes ;
6200+ result.aliasTypeArguments = instantiateTypes(type.aliasTypeArguments, mapper) ;
62006201 mapper.instantiations[type.id] = result;
62016202 return result;
62026203 }
@@ -6272,14 +6273,14 @@ namespace ts {
62726273 instantiateAnonymousType(<AnonymousType>type, mapper) : type;
62736274 }
62746275 if ((<ObjectType>type).objectFlags & ObjectFlags.Reference) {
6275- return createTypeReference((<TypeReference>type).target, instantiateList ((<TypeReference>type).typeArguments, mapper, instantiateType ));
6276+ return createTypeReference((<TypeReference>type).target, instantiateTypes ((<TypeReference>type).typeArguments, mapper));
62766277 }
62776278 }
62786279 if (type.flags & TypeFlags.Union && !(type.flags & TypeFlags.Primitive)) {
6279- 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) );
62806281 }
62816282 if (type.flags & TypeFlags.Intersection) {
6282- 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) );
62836284 }
62846285 if (type.flags & TypeFlags.Index) {
62856286 return getIndexType(instantiateType((<IndexType>type).type, mapper));
0 commit comments