diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index ee0a3a90d7e99..5fac69156eb5d 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -83,9 +83,9 @@ namespace ts { // extra cost of calling `getParseTreeNode` when calling these functions from inside the // checker. const checker: TypeChecker = { - getNodeCount: () => sum<"nodeCount">(host.getSourceFiles(), "nodeCount"), - getIdentifierCount: () => sum<"identifierCount">(host.getSourceFiles(), "identifierCount"), - getSymbolCount: () => sum<"symbolCount">(host.getSourceFiles(), "symbolCount") + symbolCount, + getNodeCount: () => sum(host.getSourceFiles(), "nodeCount"), + getIdentifierCount: () => sum(host.getSourceFiles(), "identifierCount"), + getSymbolCount: () => sum(host.getSourceFiles(), "symbolCount") + symbolCount, getTypeCount: () => typeCount, isUndefinedSymbol: symbol => symbol === undefinedSymbol, isArgumentsSymbol: symbol => symbol === argumentsSymbol, diff --git a/src/compiler/core.ts b/src/compiler/core.ts index 745cce8a6cd9d..97b642d8920df 100644 --- a/src/compiler/core.ts +++ b/src/compiler/core.ts @@ -700,10 +700,11 @@ namespace ts { return result; } - export function sum(array: { [x in K]: number }[], prop: K): number { + export function sum, K extends string>(array: T[], prop: K): number { let result = 0; for (const v of array) { - result += v[prop]; + // Note: we need the following type assertion because of GH #17069 + result += v[prop] as number; } return result; }