From 01bc4efc82105043cb98e1aa9105354a78ea5424 Mon Sep 17 00:00:00 2001 From: Nathan Shively-Sanders Date: Tue, 31 Jan 2017 10:34:44 -0800 Subject: [PATCH] Add arrayFromMap utility function --- src/compiler/checker.ts | 4 +--- src/compiler/core.ts | 8 ++++++++ 2 files changed, 9 insertions(+), 3 deletions(-) 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.