diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 47811d6ccaf..ba4e8c6993d 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -14609,9 +14609,7 @@ namespace ts { function checkTypeOfExpression(node: TypeOfExpression): Type { checkExpression(node.expression); - const types: Type[] = []; - typeofEQFacts.forEach((_, s) => types.push(getLiteralTypeForText(TypeFlags.StringLiteral, s))); - return getUnionType(types); + return getUnionType(arrayFromMap(typeofEQFacts.keys(), s => getLiteralTypeForText(TypeFlags.StringLiteral, s))); } function checkVoidExpression(node: VoidExpression): Type { diff --git a/src/compiler/core.ts b/src/compiler/core.ts index de3472afd88..486dd5b42c8 100644 --- a/src/compiler/core.ts +++ b/src/compiler/core.ts @@ -895,6 +895,14 @@ namespace ts { return result; } + export function arrayFromMap(iterator: Iterator, f: (value: T) => U) { + const result: U[] = []; + for (let { value, done } = iterator.next(); !done; { value, done } = iterator.next()) { + result.push(f(value)); + } + return result; + } + /** * Calls `callback` for each entry in the map, returning the first truthy result. * Use `map.forEach` instead for normal iteration.