@@ -1868,7 +1868,7 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
1868
1868
const nodeLinks = getNodeLinks(node);
1869
1869
cachedResolvedSignatures.push([nodeLinks, nodeLinks.resolvedSignature] as const);
1870
1870
nodeLinks.resolvedSignature = undefined;
1871
- if (isFunctionLike (node)) {
1871
+ if (isFunctionExpressionOrArrowFunction (node)) {
1872
1872
const symbolLinks = getSymbolLinks(getSymbolOfDeclaration(node));
1873
1873
const type = symbolLinks.type;
1874
1874
cachedTypes.push([symbolLinks, type] as const);
@@ -6949,6 +6949,8 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
6949
6949
context.symbolDepth!.set(id, depth + 1);
6950
6950
}
6951
6951
context.visitedTypes.add(typeId);
6952
+ const prevTrackedSymbols = context.trackedSymbols;
6953
+ context.trackedSymbols = undefined;
6952
6954
const startLength = context.approximateLength;
6953
6955
const result = transform(type);
6954
6956
const addedLength = context.approximateLength - startLength;
@@ -6964,6 +6966,7 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
6964
6966
if (id) {
6965
6967
context.symbolDepth!.set(id, depth!);
6966
6968
}
6969
+ context.trackedSymbols = prevTrackedSymbols;
6967
6970
return result;
6968
6971
6969
6972
function deepCloneOrReuseNode<T extends Node>(node: T): T {
@@ -7312,7 +7315,7 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
7312
7315
7313
7316
if (propertySymbol.flags & SymbolFlags.Accessor) {
7314
7317
const writeType = getWriteTypeOfSymbol(propertySymbol);
7315
- if (propertyType !== writeType) {
7318
+ if (propertyType !== writeType && !isErrorType(propertyType) && !isErrorType(writeType) ) {
7316
7319
const getterDeclaration = getDeclarationOfKind<GetAccessorDeclaration>(propertySymbol, SyntaxKind.GetAccessor)!;
7317
7320
const getterSignature = getSignatureFromDeclaration(getterDeclaration);
7318
7321
typeElements.push(
@@ -8299,7 +8302,7 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
8299
8302
return factory.createStringLiteral(name, !!singleQuote);
8300
8303
}
8301
8304
if (isNumericLiteralName(name) && startsWith(name, "-")) {
8302
- return factory.createComputedPropertyName(factory.createPrefixUnaryExpression(SyntaxKind.MinusToken, factory. createNumericLiteral(Math.abs( +name)) ));
8305
+ return factory.createComputedPropertyName(factory.createNumericLiteral(+name));
8303
8306
}
8304
8307
return createPropertyNameNodeForIdentifierOrLiteral(name, getEmitScriptTarget(compilerOptions), singleQuote, stringNamed, isMethod);
8305
8308
}
@@ -38953,14 +38956,9 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
38953
38956
return hasSkipDirectInferenceFlag(node) ?
38954
38957
blockedStringType :
38955
38958
getFreshTypeOfLiteralType(getStringLiteralType((node as StringLiteralLike).text));
38956
- case SyntaxKind.NumericLiteral: {
38959
+ case SyntaxKind.NumericLiteral:
38957
38960
checkGrammarNumericLiteral(node as NumericLiteral);
38958
- const value = +(node as NumericLiteral).text;
38959
- if (!isFinite(value)) {
38960
- return numberType;
38961
- }
38962
- return getFreshTypeOfLiteralType(getNumberLiteralType(value));
38963
- }
38961
+ return getFreshTypeOfLiteralType(getNumberLiteralType(+(node as NumericLiteral).text));
38964
38962
case SyntaxKind.BigIntLiteral:
38965
38963
checkGrammarBigIntLiteral(node as BigIntLiteral);
38966
38964
return getFreshTypeOfLiteralType(getBigIntLiteralType({
@@ -47883,9 +47881,8 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
47883
47881
if (enumResult) return enumResult;
47884
47882
const literalValue = (type as LiteralType).value;
47885
47883
return typeof literalValue === "object" ? factory.createBigIntLiteral(literalValue) :
47886
- typeof literalValue === "string" ? factory.createStringLiteral(literalValue) :
47887
- literalValue < 0 ? factory.createPrefixUnaryExpression(SyntaxKind.MinusToken, factory.createNumericLiteral(Math.abs(literalValue))) :
47888
- factory.createNumericLiteral(literalValue);
47884
+ typeof literalValue === "number" ? factory.createNumericLiteral(literalValue) :
47885
+ factory.createStringLiteral(literalValue);
47889
47886
}
47890
47887
47891
47888
function createLiteralConstValue(node: VariableDeclaration | PropertyDeclaration | PropertySignature | ParameterDeclaration, tracker: SymbolTracker) {
0 commit comments