@@ -16919,13 +16919,13 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
1691916919 return createTypeReference(target, typeArguments);
1692016920 }
1692116921
16922- function createTypeReference(target: GenericType, typeArguments: readonly Type[] | undefined): TypeReference {
16922+ function createTypeReference(target: GenericType, typeArguments: readonly Type[] | undefined, fromTypeNode?: boolean ): TypeReference {
1692316923 const id = getTypeListId(typeArguments);
1692416924 let type = target.instantiations.get(id);
1692516925 if (!type) {
1692616926 type = createObjectType(ObjectFlags.Reference, target.symbol) as TypeReference;
1692716927 target.instantiations.set(id, type);
16928- type.objectFlags |= typeArguments ? getPropagatingFlagsOfTypes(typeArguments) : 0;
16928+ type.objectFlags |= ( typeArguments ? getPropagatingFlagsOfTypes(typeArguments) : 0) | (fromTypeNode ? ObjectFlags.FromTypeNode : 0) ;
1692916929 type.target = target;
1693016930 type.resolvedTypeArguments = typeArguments;
1693116931 }
@@ -17019,7 +17019,7 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
1701917019 // supplied as type arguments and the type reference only specifies arguments for the local type parameters
1702017020 // of the class or interface.
1702117021 const typeArguments = concatenate(type.outerTypeParameters, fillMissingTypeArguments(typeArgumentsFromTypeReferenceNode(node), typeParameters, minTypeArgumentCount, isJs));
17022- return createTypeReference(type as GenericType, typeArguments);
17022+ return createTypeReference(type as GenericType, typeArguments, /*fromTypeNode*/ true );
1702317023 }
1702417024 return checkNoTypeArguments(node, symbol) ? type : errorType;
1702517025 }
@@ -17834,7 +17834,9 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
1783417834 }
1783517835 else {
1783617836 const elementTypes = node.kind === SyntaxKind.ArrayType ? [getTypeFromTypeNode(node.elementType)] : map(node.elements, getTypeFromTypeNode);
17837- links.resolvedType = createNormalizedTypeReference(target, elementTypes);
17837+ links.resolvedType = target.objectFlags & ObjectFlags.Tuple ?
17838+ createNormalizedTupleType(target as TupleType, elementTypes) :
17839+ createTypeReference(target, elementTypes, /*fromTypeNode*/ true);
1783817840 }
1783917841 }
1784017842 return links.resolvedType;
@@ -21061,25 +21063,15 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
2106121063 if (flags & TypeFlags.Object) {
2106221064 const objectFlags = (type as ObjectType).objectFlags;
2106321065 if (objectFlags & (ObjectFlags.Reference | ObjectFlags.Anonymous | ObjectFlags.Mapped)) {
21064- let result;
2106521066 if (objectFlags & ObjectFlags.Reference && !(type as TypeReference).node) {
2106621067 const resolvedTypeArguments = (type as TypeReference).resolvedTypeArguments;
2106721068 const newTypeArguments = instantiateTypes(resolvedTypeArguments, mapper);
21068- if (newTypeArguments === resolvedTypeArguments) {
21069- return type;
21070- }
21071- result = (type as TypeReference).target.objectFlags & ObjectFlags.Tuple ?
21072- createNormalizedTupleType((type as TypeReference).target as TupleType, newTypeArguments!) :
21073- createTypeReference((type as TypeReference).target, newTypeArguments);
21069+ return newTypeArguments !== resolvedTypeArguments ? createNormalizedTypeReference((type as TypeReference).target, newTypeArguments) : type;
2107421070 }
21075- else if (objectFlags & ObjectFlags.ReverseMapped) {
21076- result = instantiateReverseMappedType(type as ReverseMappedType, mapper);
21071+ if (objectFlags & ObjectFlags.ReverseMapped) {
21072+ return instantiateReverseMappedType(type as ReverseMappedType, mapper);
2107721073 }
21078- else {
21079- result = getObjectTypeInstantiation(type as TypeReference | AnonymousType | MappedType, mapper, aliasSymbol, aliasTypeArguments);
21080- }
21081- (result as ObjectType).objectFlags |= ObjectFlags.InstantiationResult;
21082- return result;
21074+ return getObjectTypeInstantiation(type as TypeReference | AnonymousType | MappedType, mapper, aliasSymbol, aliasTypeArguments);
2108321075 }
2108421076 return type;
2108521077 }
@@ -25317,7 +25309,7 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
2531725309 // unique AST node.
2531825310 return (type as TypeReference).node!;
2531925311 }
25320- if (type.symbol && !(objectFlags & ObjectFlags.Anonymous && type.symbol.flags & SymbolFlags.Class) && objectFlags & ObjectFlags.InstantiationResult ) {
25312+ if (type.symbol && !(objectFlags & ObjectFlags.Anonymous && type.symbol.flags & SymbolFlags.Class) && !( objectFlags & ObjectFlags.FromTypeNode) ) {
2532125313 // We track instantiated object types that have a symbol by that symbol (representing the origin of the
2532225314 // type), but exclude the static side of a class since it shares its symbol with the instance side.
2532325315 return type.symbol;
0 commit comments