From 268dbfe093ed0e3c0008709f900868a3e1b2897e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E6=96=87=E7=92=90?= Date: Fri, 24 Aug 2018 11:00:59 +0800 Subject: [PATCH 01/49] parse less than token rather than left shift in context of type arguments --- src/compiler/parser.ts | 6 +++++- src/compiler/scanner.ts | 10 ++++++++++ tests/baselines/reference/api/tsserverlibrary.d.ts | 1 + tests/baselines/reference/api/typescript.d.ts | 1 + .../parseGenericArrowRatherThanLeftShift.js | 7 +++++++ .../parseGenericArrowRatherThanLeftShift.symbols | 12 ++++++++++++ .../parseGenericArrowRatherThanLeftShift.types | 8 ++++++++ .../compiler/parseGenericArrowRatherThanLeftShift.ts | 3 +++ 8 files changed, 47 insertions(+), 1 deletion(-) create mode 100644 tests/baselines/reference/parseGenericArrowRatherThanLeftShift.js create mode 100644 tests/baselines/reference/parseGenericArrowRatherThanLeftShift.symbols create mode 100644 tests/baselines/reference/parseGenericArrowRatherThanLeftShift.types create mode 100644 tests/cases/compiler/parseGenericArrowRatherThanLeftShift.ts diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index 096c3f16354..a76f9eb59b4 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -1093,6 +1093,10 @@ namespace ts { return currentToken = scanner.reScanTemplateToken(); } + function reScanLessThanToken(): SyntaxKind { + return currentToken = scanner.reScanLessThanToken(); + } + function scanJsxIdentifier(): SyntaxKind { return currentToken = scanner.scanJsxIdentifier(); } @@ -2263,7 +2267,7 @@ namespace ts { function parseTypeReference(): TypeReferenceNode { const node = createNode(SyntaxKind.TypeReference); node.typeName = parseEntityName(/*allowReservedWords*/ true, Diagnostics.Type_expected); - if (!scanner.hasPrecedingLineBreak() && token() === SyntaxKind.LessThanToken) { + if (!scanner.hasPrecedingLineBreak() && reScanLessThanToken() === SyntaxKind.LessThanToken) { node.typeArguments = parseBracketedList(ParsingContext.TypeArguments, parseType, SyntaxKind.LessThanToken, SyntaxKind.GreaterThanToken); } return finishNode(node); diff --git a/src/compiler/scanner.ts b/src/compiler/scanner.ts index 61ce8330bff..9359fe9b30b 100644 --- a/src/compiler/scanner.ts +++ b/src/compiler/scanner.ts @@ -31,6 +31,7 @@ namespace ts { scanJsxIdentifier(): SyntaxKind; scanJsxAttributeValue(): SyntaxKind; reScanJsxToken(): JsxTokenSyntaxKind; + reScanLessThanToken(): SyntaxKind; scanJsxToken(): JsxTokenSyntaxKind; scanJSDocToken(): JsDocSyntaxKind; scan(): SyntaxKind; @@ -845,6 +846,7 @@ namespace ts { scanJsxIdentifier, scanJsxAttributeValue, reScanJsxToken, + reScanLessThanToken, scanJsxToken, scanJSDocToken, scan, @@ -1840,6 +1842,14 @@ namespace ts { return token = scanJsxToken(); } + function reScanLessThanToken(): SyntaxKind { + if (token === SyntaxKind.LessThanLessThanToken) { + pos = tokenPos + 1; + return token = SyntaxKind.LessThanToken; + } + return token; + } + function scanJsxToken(): JsxTokenSyntaxKind { startPos = tokenPos = pos; diff --git a/tests/baselines/reference/api/tsserverlibrary.d.ts b/tests/baselines/reference/api/tsserverlibrary.d.ts index 5e992f3847a..25f71327d3a 100644 --- a/tests/baselines/reference/api/tsserverlibrary.d.ts +++ b/tests/baselines/reference/api/tsserverlibrary.d.ts @@ -3071,6 +3071,7 @@ declare namespace ts { scanJsxIdentifier(): SyntaxKind; scanJsxAttributeValue(): SyntaxKind; reScanJsxToken(): JsxTokenSyntaxKind; + reScanLessThanToken(): SyntaxKind; scanJsxToken(): JsxTokenSyntaxKind; scanJSDocToken(): JsDocSyntaxKind; scan(): SyntaxKind; diff --git a/tests/baselines/reference/api/typescript.d.ts b/tests/baselines/reference/api/typescript.d.ts index 32761156558..6a01e6bb58f 100644 --- a/tests/baselines/reference/api/typescript.d.ts +++ b/tests/baselines/reference/api/typescript.d.ts @@ -3071,6 +3071,7 @@ declare namespace ts { scanJsxIdentifier(): SyntaxKind; scanJsxAttributeValue(): SyntaxKind; reScanJsxToken(): JsxTokenSyntaxKind; + reScanLessThanToken(): SyntaxKind; scanJsxToken(): JsxTokenSyntaxKind; scanJSDocToken(): JsDocSyntaxKind; scan(): SyntaxKind; diff --git a/tests/baselines/reference/parseGenericArrowRatherThanLeftShift.js b/tests/baselines/reference/parseGenericArrowRatherThanLeftShift.js new file mode 100644 index 00000000000..3416e5ad0f8 --- /dev/null +++ b/tests/baselines/reference/parseGenericArrowRatherThanLeftShift.js @@ -0,0 +1,7 @@ +//// [parseGenericArrowRatherThanLeftShift.ts] +type Bar = ReturnType<(x: T) => number>; + +declare const a: Bar; + + +//// [parseGenericArrowRatherThanLeftShift.js] diff --git a/tests/baselines/reference/parseGenericArrowRatherThanLeftShift.symbols b/tests/baselines/reference/parseGenericArrowRatherThanLeftShift.symbols new file mode 100644 index 00000000000..8610080455a --- /dev/null +++ b/tests/baselines/reference/parseGenericArrowRatherThanLeftShift.symbols @@ -0,0 +1,12 @@ +=== tests/cases/compiler/parseGenericArrowRatherThanLeftShift.ts === +type Bar = ReturnType<(x: T) => number>; +>Bar : Symbol(Bar, Decl(parseGenericArrowRatherThanLeftShift.ts, 0, 0)) +>ReturnType : Symbol(ReturnType, Decl(lib.es5.d.ts, --, --)) +>T : Symbol(T, Decl(parseGenericArrowRatherThanLeftShift.ts, 0, 23)) +>x : Symbol(x, Decl(parseGenericArrowRatherThanLeftShift.ts, 0, 26)) +>T : Symbol(T, Decl(parseGenericArrowRatherThanLeftShift.ts, 0, 23)) + +declare const a: Bar; +>a : Symbol(a, Decl(parseGenericArrowRatherThanLeftShift.ts, 2, 13)) +>Bar : Symbol(Bar, Decl(parseGenericArrowRatherThanLeftShift.ts, 0, 0)) + diff --git a/tests/baselines/reference/parseGenericArrowRatherThanLeftShift.types b/tests/baselines/reference/parseGenericArrowRatherThanLeftShift.types new file mode 100644 index 00000000000..8c959cbed16 --- /dev/null +++ b/tests/baselines/reference/parseGenericArrowRatherThanLeftShift.types @@ -0,0 +1,8 @@ +=== tests/cases/compiler/parseGenericArrowRatherThanLeftShift.ts === +type Bar = ReturnType<(x: T) => number>; +>Bar : number +>x : T + +declare const a: Bar; +>a : number + diff --git a/tests/cases/compiler/parseGenericArrowRatherThanLeftShift.ts b/tests/cases/compiler/parseGenericArrowRatherThanLeftShift.ts new file mode 100644 index 00000000000..cf4f06a5900 --- /dev/null +++ b/tests/cases/compiler/parseGenericArrowRatherThanLeftShift.ts @@ -0,0 +1,3 @@ +type Bar = ReturnType<(x: T) => number>; + +declare const a: Bar; From 78444bb724cdf5ed3fdf413a2a1bb62cab0dd855 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E6=96=87=E7=92=90?= Date: Mon, 27 Aug 2018 11:47:10 +0800 Subject: [PATCH 02/49] improve test case --- src/compiler/parser.ts | 12 +++++++----- src/compiler/scanner.ts | 6 +++--- .../baselines/reference/api/tsserverlibrary.d.ts | 2 +- tests/baselines/reference/api/typescript.d.ts | 2 +- .../parseGenericArrowRatherThanLeftShift.js | 6 +++++- .../parseGenericArrowRatherThanLeftShift.symbols | 15 ++++++++++++++- .../parseGenericArrowRatherThanLeftShift.types | 12 ++++++++++++ .../parseGenericArrowRatherThanLeftShift.ts | 4 +++- 8 files changed, 46 insertions(+), 13 deletions(-) diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index a76f9eb59b4..4b0c0010de0 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -1093,8 +1093,8 @@ namespace ts { return currentToken = scanner.reScanTemplateToken(); } - function reScanLessThanToken(): SyntaxKind { - return currentToken = scanner.reScanLessThanToken(); + function reScanLesserToken(): SyntaxKind { + return currentToken = scanner.reScanLesserToken(); } function scanJsxIdentifier(): SyntaxKind { @@ -2267,7 +2267,7 @@ namespace ts { function parseTypeReference(): TypeReferenceNode { const node = createNode(SyntaxKind.TypeReference); node.typeName = parseEntityName(/*allowReservedWords*/ true, Diagnostics.Type_expected); - if (!scanner.hasPrecedingLineBreak() && reScanLessThanToken() === SyntaxKind.LessThanToken) { + if (!scanner.hasPrecedingLineBreak() && reScanLesserToken() === SyntaxKind.LessThanToken) { node.typeArguments = parseBracketedList(ParsingContext.TypeArguments, parseType, SyntaxKind.LessThanToken, SyntaxKind.GreaterThanToken); } return finishNode(node); @@ -4506,7 +4506,8 @@ namespace ts { function parseCallExpressionRest(expression: LeftHandSideExpression): LeftHandSideExpression { while (true) { expression = parseMemberExpressionRest(expression); - if (token() === SyntaxKind.LessThanToken) { + // handle 'foo<()' + if (token() === SyntaxKind.LessThanToken || token() === SyntaxKind.LessThanLessThanToken) { // See if this is the start of a generic invocation. If so, consume it and // keep checking for postfix expressions. Otherwise, it's just a '<' that's // part of an arithmetic expression. Break out so we consume it higher in the @@ -4548,9 +4549,10 @@ namespace ts { } function parseTypeArgumentsInExpression() { - if (!parseOptional(SyntaxKind.LessThanToken)) { + if (reScanLesserToken() !== SyntaxKind.LessThanToken) { return undefined; } + nextToken(); const typeArguments = parseDelimitedList(ParsingContext.TypeArguments, parseType); if (!parseExpected(SyntaxKind.GreaterThanToken)) { diff --git a/src/compiler/scanner.ts b/src/compiler/scanner.ts index 9359fe9b30b..0411fa6635f 100644 --- a/src/compiler/scanner.ts +++ b/src/compiler/scanner.ts @@ -31,7 +31,7 @@ namespace ts { scanJsxIdentifier(): SyntaxKind; scanJsxAttributeValue(): SyntaxKind; reScanJsxToken(): JsxTokenSyntaxKind; - reScanLessThanToken(): SyntaxKind; + reScanLesserToken(): SyntaxKind; scanJsxToken(): JsxTokenSyntaxKind; scanJSDocToken(): JsDocSyntaxKind; scan(): SyntaxKind; @@ -846,7 +846,7 @@ namespace ts { scanJsxIdentifier, scanJsxAttributeValue, reScanJsxToken, - reScanLessThanToken, + reScanLesserToken, scanJsxToken, scanJSDocToken, scan, @@ -1842,7 +1842,7 @@ namespace ts { return token = scanJsxToken(); } - function reScanLessThanToken(): SyntaxKind { + function reScanLesserToken(): SyntaxKind { if (token === SyntaxKind.LessThanLessThanToken) { pos = tokenPos + 1; return token = SyntaxKind.LessThanToken; diff --git a/tests/baselines/reference/api/tsserverlibrary.d.ts b/tests/baselines/reference/api/tsserverlibrary.d.ts index 25f71327d3a..a28cb6ab6ee 100644 --- a/tests/baselines/reference/api/tsserverlibrary.d.ts +++ b/tests/baselines/reference/api/tsserverlibrary.d.ts @@ -3071,7 +3071,7 @@ declare namespace ts { scanJsxIdentifier(): SyntaxKind; scanJsxAttributeValue(): SyntaxKind; reScanJsxToken(): JsxTokenSyntaxKind; - reScanLessThanToken(): SyntaxKind; + reScanLesserToken(): SyntaxKind; scanJsxToken(): JsxTokenSyntaxKind; scanJSDocToken(): JsDocSyntaxKind; scan(): SyntaxKind; diff --git a/tests/baselines/reference/api/typescript.d.ts b/tests/baselines/reference/api/typescript.d.ts index 6a01e6bb58f..87bd074c943 100644 --- a/tests/baselines/reference/api/typescript.d.ts +++ b/tests/baselines/reference/api/typescript.d.ts @@ -3071,7 +3071,7 @@ declare namespace ts { scanJsxIdentifier(): SyntaxKind; scanJsxAttributeValue(): SyntaxKind; reScanJsxToken(): JsxTokenSyntaxKind; - reScanLessThanToken(): SyntaxKind; + reScanLesserToken(): SyntaxKind; scanJsxToken(): JsxTokenSyntaxKind; scanJSDocToken(): JsDocSyntaxKind; scan(): SyntaxKind; diff --git a/tests/baselines/reference/parseGenericArrowRatherThanLeftShift.js b/tests/baselines/reference/parseGenericArrowRatherThanLeftShift.js index 3416e5ad0f8..f1efc8023b5 100644 --- a/tests/baselines/reference/parseGenericArrowRatherThanLeftShift.js +++ b/tests/baselines/reference/parseGenericArrowRatherThanLeftShift.js @@ -1,7 +1,11 @@ //// [parseGenericArrowRatherThanLeftShift.ts] type Bar = ReturnType<(x: T) => number>; - declare const a: Bar; + +function foo(_x: T) {} +const b = foo<(x: T) => number>(() => 1); //// [parseGenericArrowRatherThanLeftShift.js] +function foo(_x) { } +var b = foo(function () { return 1; }); diff --git a/tests/baselines/reference/parseGenericArrowRatherThanLeftShift.symbols b/tests/baselines/reference/parseGenericArrowRatherThanLeftShift.symbols index 8610080455a..335ffd451e4 100644 --- a/tests/baselines/reference/parseGenericArrowRatherThanLeftShift.symbols +++ b/tests/baselines/reference/parseGenericArrowRatherThanLeftShift.symbols @@ -7,6 +7,19 @@ type Bar = ReturnType<(x: T) => number>; >T : Symbol(T, Decl(parseGenericArrowRatherThanLeftShift.ts, 0, 23)) declare const a: Bar; ->a : Symbol(a, Decl(parseGenericArrowRatherThanLeftShift.ts, 2, 13)) +>a : Symbol(a, Decl(parseGenericArrowRatherThanLeftShift.ts, 1, 13)) >Bar : Symbol(Bar, Decl(parseGenericArrowRatherThanLeftShift.ts, 0, 0)) +function foo(_x: T) {} +>foo : Symbol(foo, Decl(parseGenericArrowRatherThanLeftShift.ts, 1, 21)) +>T : Symbol(T, Decl(parseGenericArrowRatherThanLeftShift.ts, 3, 13)) +>_x : Symbol(_x, Decl(parseGenericArrowRatherThanLeftShift.ts, 3, 16)) +>T : Symbol(T, Decl(parseGenericArrowRatherThanLeftShift.ts, 3, 13)) + +const b = foo<(x: T) => number>(() => 1); +>b : Symbol(b, Decl(parseGenericArrowRatherThanLeftShift.ts, 4, 5)) +>foo : Symbol(foo, Decl(parseGenericArrowRatherThanLeftShift.ts, 1, 21)) +>T : Symbol(T, Decl(parseGenericArrowRatherThanLeftShift.ts, 4, 15)) +>x : Symbol(x, Decl(parseGenericArrowRatherThanLeftShift.ts, 4, 18)) +>T : Symbol(T, Decl(parseGenericArrowRatherThanLeftShift.ts, 4, 15)) + diff --git a/tests/baselines/reference/parseGenericArrowRatherThanLeftShift.types b/tests/baselines/reference/parseGenericArrowRatherThanLeftShift.types index 8c959cbed16..3f256ffdcaa 100644 --- a/tests/baselines/reference/parseGenericArrowRatherThanLeftShift.types +++ b/tests/baselines/reference/parseGenericArrowRatherThanLeftShift.types @@ -6,3 +6,15 @@ type Bar = ReturnType<(x: T) => number>; declare const a: Bar; >a : number +function foo(_x: T) {} +>foo : (_x: T) => void +>_x : T + +const b = foo<(x: T) => number>(() => 1); +>b : void +>foo<(x: T) => number>(() => 1) : void +>foo : (_x: T) => void +>x : T +>() => 1 : () => number +>1 : 1 + diff --git a/tests/cases/compiler/parseGenericArrowRatherThanLeftShift.ts b/tests/cases/compiler/parseGenericArrowRatherThanLeftShift.ts index cf4f06a5900..e61f13a8515 100644 --- a/tests/cases/compiler/parseGenericArrowRatherThanLeftShift.ts +++ b/tests/cases/compiler/parseGenericArrowRatherThanLeftShift.ts @@ -1,3 +1,5 @@ type Bar = ReturnType<(x: T) => number>; - declare const a: Bar; + +function foo(_x: T) {} +const b = foo<(x: T) => number>(() => 1); From f396a2c7a8621788bdfe8438a64607cba09afbb3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E6=96=87=E7=92=90?= Date: Fri, 7 Sep 2018 11:39:50 +0800 Subject: [PATCH 03/49] rename rescan function --- src/compiler/parser.ts | 8 ++++---- src/compiler/scanner.ts | 6 +++--- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index 70bbfc8430a..1405428458f 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -1099,8 +1099,8 @@ namespace ts { return currentToken = scanner.reScanTemplateToken(); } - function reScanLesserToken(): SyntaxKind { - return currentToken = scanner.reScanLesserToken(); + function reScanLessThanToken(): SyntaxKind { + return currentToken = scanner.reScanLessThanToken(); } function scanJsxIdentifier(): SyntaxKind { @@ -2273,7 +2273,7 @@ namespace ts { function parseTypeReference(): TypeReferenceNode { const node = createNode(SyntaxKind.TypeReference); node.typeName = parseEntityName(/*allowReservedWords*/ true, Diagnostics.Type_expected); - if (!scanner.hasPrecedingLineBreak() && reScanLesserToken() === SyntaxKind.LessThanToken) { + if (!scanner.hasPrecedingLineBreak() && reScanLessThanToken() === SyntaxKind.LessThanToken) { node.typeArguments = parseBracketedList(ParsingContext.TypeArguments, parseType, SyntaxKind.LessThanToken, SyntaxKind.GreaterThanToken); } return finishNode(node); @@ -4557,7 +4557,7 @@ namespace ts { } function parseTypeArgumentsInExpression() { - if (reScanLesserToken() !== SyntaxKind.LessThanToken) { + if (reScanLessThanToken() !== SyntaxKind.LessThanToken) { return undefined; } nextToken(); diff --git a/src/compiler/scanner.ts b/src/compiler/scanner.ts index fba45bcf4dc..90e0c9f7681 100644 --- a/src/compiler/scanner.ts +++ b/src/compiler/scanner.ts @@ -31,7 +31,7 @@ namespace ts { scanJsxIdentifier(): SyntaxKind; scanJsxAttributeValue(): SyntaxKind; reScanJsxToken(): JsxTokenSyntaxKind; - reScanLesserToken(): SyntaxKind; + reScanLessThanToken(): SyntaxKind; scanJsxToken(): JsxTokenSyntaxKind; scanJSDocToken(): JsDocSyntaxKind; scan(): SyntaxKind; @@ -850,7 +850,7 @@ namespace ts { scanJsxIdentifier, scanJsxAttributeValue, reScanJsxToken, - reScanLesserToken, + reScanLessThanToken, scanJsxToken, scanJSDocToken, scan, @@ -1871,7 +1871,7 @@ namespace ts { return token = scanJsxToken(); } - function reScanLesserToken(): SyntaxKind { + function reScanLessThanToken(): SyntaxKind { if (token === SyntaxKind.LessThanLessThanToken) { pos = tokenPos + 1; return token = SyntaxKind.LessThanToken; From 9819b6b7aa1f4779eac84b6d056937b8f4800fcd Mon Sep 17 00:00:00 2001 From: xl1 Date: Sat, 15 Sep 2018 23:00:01 +0900 Subject: [PATCH 04/49] Allow non-number array for source of TypedArray.from --- src/lib/es5.d.ts | 74 +++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 64 insertions(+), 10 deletions(-) diff --git a/src/lib/es5.d.ts b/src/lib/es5.d.ts index 015eec5c3e0..f549bea6160 100644 --- a/src/lib/es5.d.ts +++ b/src/lib/es5.d.ts @@ -517,7 +517,7 @@ interface TemplateStringsArray extends ReadonlyArray { /** * The type of `import.meta`. - * + * * If you need to declare that a given property exists on `import.meta`, * this type may be augmented via interface merging. */ @@ -1843,13 +1843,19 @@ interface Int8ArrayConstructor { */ of(...items: number[]): Int8Array; + /** + * Creates an array from an array-like or iterable object. + * @param arrayLike An array-like or iterable object to convert to an array. + */ + from(arrayLike: ArrayLike): Int8Array; + /** * Creates an array from an array-like or iterable object. * @param arrayLike An array-like or iterable object to convert to an array. * @param mapfn A mapping function to call on every element of the array. * @param thisArg Value of 'this' used to invoke the mapfn. */ - from(arrayLike: ArrayLike, mapfn?: (v: number, k: number) => number, thisArg?: any): Int8Array; + from(arrayLike: ArrayLike, mapfn: (v: T, k: number) => number, thisArg?: any): Int8Array; } @@ -2113,13 +2119,19 @@ interface Uint8ArrayConstructor { */ of(...items: number[]): Uint8Array; + /** + * Creates an array from an array-like or iterable object. + * @param arrayLike An array-like or iterable object to convert to an array. + */ + from(arrayLike: ArrayLike): Uint8Array; + /** * Creates an array from an array-like or iterable object. * @param arrayLike An array-like or iterable object to convert to an array. * @param mapfn A mapping function to call on every element of the array. * @param thisArg Value of 'this' used to invoke the mapfn. */ - from(arrayLike: ArrayLike, mapfn?: (v: number, k: number) => number, thisArg?: any): Uint8Array; + from(arrayLike: ArrayLike, mapfn: (v: T, k: number) => number, thisArg?: any): Uint8Array; } declare const Uint8Array: Uint8ArrayConstructor; @@ -2382,13 +2394,19 @@ interface Uint8ClampedArrayConstructor { */ of(...items: number[]): Uint8ClampedArray; + /** + * Creates an array from an array-like or iterable object. + * @param arrayLike An array-like or iterable object to convert to an array. + */ + from(arrayLike: ArrayLike): Uint8ClampedArray; + /** * Creates an array from an array-like or iterable object. * @param arrayLike An array-like or iterable object to convert to an array. * @param mapfn A mapping function to call on every element of the array. * @param thisArg Value of 'this' used to invoke the mapfn. */ - from(arrayLike: ArrayLike, mapfn?: (v: number, k: number) => number, thisArg?: any): Uint8ClampedArray; + from(arrayLike: ArrayLike, mapfn: (v: T, k: number) => number, thisArg?: any): Uint8ClampedArray; } declare const Uint8ClampedArray: Uint8ClampedArrayConstructor; @@ -2649,13 +2667,19 @@ interface Int16ArrayConstructor { */ of(...items: number[]): Int16Array; + /** + * Creates an array from an array-like or iterable object. + * @param arrayLike An array-like or iterable object to convert to an array. + */ + from(arrayLike: ArrayLike): Int16Array; + /** * Creates an array from an array-like or iterable object. * @param arrayLike An array-like or iterable object to convert to an array. * @param mapfn A mapping function to call on every element of the array. * @param thisArg Value of 'this' used to invoke the mapfn. */ - from(arrayLike: ArrayLike, mapfn?: (v: number, k: number) => number, thisArg?: any): Int16Array; + from(arrayLike: ArrayLike, mapfn: (v: T, k: number) => number, thisArg?: any): Int16Array; } @@ -2919,13 +2943,19 @@ interface Uint16ArrayConstructor { */ of(...items: number[]): Uint16Array; + /** + * Creates an array from an array-like or iterable object. + * @param arrayLike An array-like or iterable object to convert to an array. + */ + from(arrayLike: ArrayLike): Uint16Array; + /** * Creates an array from an array-like or iterable object. * @param arrayLike An array-like or iterable object to convert to an array. * @param mapfn A mapping function to call on every element of the array. * @param thisArg Value of 'this' used to invoke the mapfn. */ - from(arrayLike: ArrayLike, mapfn?: (v: number, k: number) => number, thisArg?: any): Uint16Array; + from(arrayLike: ArrayLike, mapfn: (v: T, k: number) => number, thisArg?: any): Uint16Array; } @@ -3188,13 +3218,19 @@ interface Int32ArrayConstructor { */ of(...items: number[]): Int32Array; + /** + * Creates an array from an array-like or iterable object. + * @param arrayLike An array-like or iterable object to convert to an array. + */ + from(arrayLike: ArrayLike): Int32Array; + /** * Creates an array from an array-like or iterable object. * @param arrayLike An array-like or iterable object to convert to an array. * @param mapfn A mapping function to call on every element of the array. * @param thisArg Value of 'this' used to invoke the mapfn. */ - from(arrayLike: ArrayLike, mapfn?: (v: number, k: number) => number, thisArg?: any): Int32Array; + from(arrayLike: ArrayLike, mapfn: (v: T, k: number) => number, thisArg?: any): Int32Array; } declare const Int32Array: Int32ArrayConstructor; @@ -3456,13 +3492,19 @@ interface Uint32ArrayConstructor { */ of(...items: number[]): Uint32Array; + /** + * Creates an array from an array-like or iterable object. + * @param arrayLike An array-like or iterable object to convert to an array. + */ + from(arrayLike: ArrayLike): Uint32Array; + /** * Creates an array from an array-like or iterable object. * @param arrayLike An array-like or iterable object to convert to an array. * @param mapfn A mapping function to call on every element of the array. * @param thisArg Value of 'this' used to invoke the mapfn. */ - from(arrayLike: ArrayLike, mapfn?: (v: number, k: number) => number, thisArg?: any): Uint32Array; + from(arrayLike: ArrayLike, mapfn: (v: T, k: number) => number, thisArg?: any): Uint32Array; } declare const Uint32Array: Uint32ArrayConstructor; @@ -3725,13 +3767,19 @@ interface Float32ArrayConstructor { */ of(...items: number[]): Float32Array; + /** + * Creates an array from an array-like or iterable object. + * @param arrayLike An array-like or iterable object to convert to an array. + */ + from(arrayLike: ArrayLike): Float32Array; + /** * Creates an array from an array-like or iterable object. * @param arrayLike An array-like or iterable object to convert to an array. * @param mapfn A mapping function to call on every element of the array. * @param thisArg Value of 'this' used to invoke the mapfn. */ - from(arrayLike: ArrayLike, mapfn?: (v: number, k: number) => number, thisArg?: any): Float32Array; + from(arrayLike: ArrayLike, mapfn: (v: T, k: number) => number, thisArg?: any): Float32Array; } @@ -3995,13 +4043,19 @@ interface Float64ArrayConstructor { */ of(...items: number[]): Float64Array; + /** + * Creates an array from an array-like or iterable object. + * @param arrayLike An array-like or iterable object to convert to an array. + */ + from(arrayLike: ArrayLike): Float64Array; + /** * Creates an array from an array-like or iterable object. * @param arrayLike An array-like or iterable object to convert to an array. * @param mapfn A mapping function to call on every element of the array. * @param thisArg Value of 'this' used to invoke the mapfn. */ - from(arrayLike: ArrayLike, mapfn?: (v: number, k: number) => number, thisArg?: any): Float64Array; + from(arrayLike: ArrayLike, mapfn: (v: T, k: number) => number, thisArg?: any): Float64Array; } declare const Float64Array: Float64ArrayConstructor; From 89e7d51df404a4adc2a940c8a308ec83e2955ac8 Mon Sep 17 00:00:00 2001 From: xl1 Date: Sat, 15 Sep 2018 23:02:36 +0900 Subject: [PATCH 05/49] Add tests --- tests/cases/compiler/typedArrays.ts | 30 +++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/tests/cases/compiler/typedArrays.ts b/tests/cases/compiler/typedArrays.ts index 602e15dc2d7..591b00aadc6 100644 --- a/tests/cases/compiler/typedArrays.ts +++ b/tests/cases/compiler/typedArrays.ts @@ -105,6 +105,21 @@ function CreateTypedArraysOf2() { return typedArrays; } +function CreateTypedArraysFromMapFn2(obj:ArrayLike, mapFn: (n:T, v:number)=> number) { + var typedArrays = []; + typedArrays[0] = Int8Array.from(obj, mapFn); + typedArrays[1] = Uint8Array.from(obj, mapFn); + typedArrays[2] = Int16Array.from(obj, mapFn); + typedArrays[3] = Uint16Array.from(obj, mapFn); + typedArrays[4] = Int32Array.from(obj, mapFn); + typedArrays[5] = Uint32Array.from(obj, mapFn); + typedArrays[6] = Float32Array.from(obj, mapFn); + typedArrays[7] = Float64Array.from(obj, mapFn); + typedArrays[8] = Uint8ClampedArray.from(obj, mapFn); + + return typedArrays; +} + function CreateTypedArraysFromMapFn(obj:ArrayLike, mapFn: (n:number, v:number)=> number) { var typedArrays = []; typedArrays[0] = Int8Array.from(obj, mapFn); @@ -132,5 +147,20 @@ function CreateTypedArraysFromThisObj(obj:ArrayLike, mapFn: (n:number, v typedArrays[7] = Float64Array.from(obj, mapFn, thisArg); typedArrays[8] = Uint8ClampedArray.from(obj, mapFn, thisArg); + return typedArrays; +} + +function CreateTypedArraysFromThisObj2(obj:ArrayLike, mapFn: (n:T, v:number)=> number, thisArg: {}) { + var typedArrays = []; + typedArrays[0] = Int8Array.from(obj, mapFn, thisArg); + typedArrays[1] = Uint8Array.from(obj, mapFn, thisArg); + typedArrays[2] = Int16Array.from(obj, mapFn, thisArg); + typedArrays[3] = Uint16Array.from(obj, mapFn, thisArg); + typedArrays[4] = Int32Array.from(obj, mapFn, thisArg); + typedArrays[5] = Uint32Array.from(obj, mapFn, thisArg); + typedArrays[6] = Float32Array.from(obj, mapFn, thisArg); + typedArrays[7] = Float64Array.from(obj, mapFn, thisArg); + typedArrays[8] = Uint8ClampedArray.from(obj, mapFn, thisArg); + return typedArrays; } \ No newline at end of file From ecc2ba71216832226ea4ee76e08d3dd8008df5bc Mon Sep 17 00:00:00 2001 From: xl1 Date: Sat, 15 Sep 2018 23:02:50 +0900 Subject: [PATCH 06/49] Update baselines --- tests/baselines/reference/typedArrays.js | 56 +++ tests/baselines/reference/typedArrays.symbols | 468 ++++++++++++------ tests/baselines/reference/typedArrays.types | 400 ++++++++++++--- 3 files changed, 713 insertions(+), 211 deletions(-) diff --git a/tests/baselines/reference/typedArrays.js b/tests/baselines/reference/typedArrays.js index b914a803185..1e322b5eac5 100644 --- a/tests/baselines/reference/typedArrays.js +++ b/tests/baselines/reference/typedArrays.js @@ -104,6 +104,21 @@ function CreateTypedArraysOf2() { return typedArrays; } +function CreateTypedArraysFromMapFn2(obj:ArrayLike, mapFn: (n:T, v:number)=> number) { + var typedArrays = []; + typedArrays[0] = Int8Array.from(obj, mapFn); + typedArrays[1] = Uint8Array.from(obj, mapFn); + typedArrays[2] = Int16Array.from(obj, mapFn); + typedArrays[3] = Uint16Array.from(obj, mapFn); + typedArrays[4] = Int32Array.from(obj, mapFn); + typedArrays[5] = Uint32Array.from(obj, mapFn); + typedArrays[6] = Float32Array.from(obj, mapFn); + typedArrays[7] = Float64Array.from(obj, mapFn); + typedArrays[8] = Uint8ClampedArray.from(obj, mapFn); + + return typedArrays; +} + function CreateTypedArraysFromMapFn(obj:ArrayLike, mapFn: (n:number, v:number)=> number) { var typedArrays = []; typedArrays[0] = Int8Array.from(obj, mapFn); @@ -131,6 +146,21 @@ function CreateTypedArraysFromThisObj(obj:ArrayLike, mapFn: (n:number, v typedArrays[7] = Float64Array.from(obj, mapFn, thisArg); typedArrays[8] = Uint8ClampedArray.from(obj, mapFn, thisArg); + return typedArrays; +} + +function CreateTypedArraysFromThisObj2(obj:ArrayLike, mapFn: (n:T, v:number)=> number, thisArg: {}) { + var typedArrays = []; + typedArrays[0] = Int8Array.from(obj, mapFn, thisArg); + typedArrays[1] = Uint8Array.from(obj, mapFn, thisArg); + typedArrays[2] = Int16Array.from(obj, mapFn, thisArg); + typedArrays[3] = Uint16Array.from(obj, mapFn, thisArg); + typedArrays[4] = Int32Array.from(obj, mapFn, thisArg); + typedArrays[5] = Uint32Array.from(obj, mapFn, thisArg); + typedArrays[6] = Float32Array.from(obj, mapFn, thisArg); + typedArrays[7] = Float64Array.from(obj, mapFn, thisArg); + typedArrays[8] = Uint8ClampedArray.from(obj, mapFn, thisArg); + return typedArrays; } @@ -226,6 +256,19 @@ function CreateTypedArraysOf2() { typedArrays[8] = Uint8ClampedArray.of(1, 2, 3, 4); return typedArrays; } +function CreateTypedArraysFromMapFn2(obj, mapFn) { + var typedArrays = []; + typedArrays[0] = Int8Array.from(obj, mapFn); + typedArrays[1] = Uint8Array.from(obj, mapFn); + typedArrays[2] = Int16Array.from(obj, mapFn); + typedArrays[3] = Uint16Array.from(obj, mapFn); + typedArrays[4] = Int32Array.from(obj, mapFn); + typedArrays[5] = Uint32Array.from(obj, mapFn); + typedArrays[6] = Float32Array.from(obj, mapFn); + typedArrays[7] = Float64Array.from(obj, mapFn); + typedArrays[8] = Uint8ClampedArray.from(obj, mapFn); + return typedArrays; +} function CreateTypedArraysFromMapFn(obj, mapFn) { var typedArrays = []; typedArrays[0] = Int8Array.from(obj, mapFn); @@ -252,3 +295,16 @@ function CreateTypedArraysFromThisObj(obj, mapFn, thisArg) { typedArrays[8] = Uint8ClampedArray.from(obj, mapFn, thisArg); return typedArrays; } +function CreateTypedArraysFromThisObj2(obj, mapFn, thisArg) { + var typedArrays = []; + typedArrays[0] = Int8Array.from(obj, mapFn, thisArg); + typedArrays[1] = Uint8Array.from(obj, mapFn, thisArg); + typedArrays[2] = Int16Array.from(obj, mapFn, thisArg); + typedArrays[3] = Uint16Array.from(obj, mapFn, thisArg); + typedArrays[4] = Int32Array.from(obj, mapFn, thisArg); + typedArrays[5] = Uint32Array.from(obj, mapFn, thisArg); + typedArrays[6] = Float32Array.from(obj, mapFn, thisArg); + typedArrays[7] = Float64Array.from(obj, mapFn, thisArg); + typedArrays[8] = Uint8ClampedArray.from(obj, mapFn, thisArg); + return typedArrays; +} diff --git a/tests/baselines/reference/typedArrays.symbols b/tests/baselines/reference/typedArrays.symbols index 656609a0499..fb6457929e4 100644 --- a/tests/baselines/reference/typedArrays.symbols +++ b/tests/baselines/reference/typedArrays.symbols @@ -166,65 +166,65 @@ function CreateIntegerTypedArraysFromArray2(obj:number[]) { typedArrays[0] = Int8Array.from(obj); >typedArrays : Symbol(typedArrays, Decl(typedArrays.ts, 46, 7)) ->Int8Array.from : Symbol(Int8ArrayConstructor.from, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) +>Int8Array.from : Symbol(Int8ArrayConstructor.from, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) >Int8Array : Symbol(Int8Array, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --)) ->from : Symbol(Int8ArrayConstructor.from, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) +>from : Symbol(Int8ArrayConstructor.from, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) >obj : Symbol(obj, Decl(typedArrays.ts, 45, 44)) typedArrays[1] = Uint8Array.from(obj); >typedArrays : Symbol(typedArrays, Decl(typedArrays.ts, 46, 7)) ->Uint8Array.from : Symbol(Uint8ArrayConstructor.from, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) +>Uint8Array.from : Symbol(Uint8ArrayConstructor.from, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) >Uint8Array : Symbol(Uint8Array, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --)) ->from : Symbol(Uint8ArrayConstructor.from, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) +>from : Symbol(Uint8ArrayConstructor.from, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) >obj : Symbol(obj, Decl(typedArrays.ts, 45, 44)) typedArrays[2] = Int16Array.from(obj); >typedArrays : Symbol(typedArrays, Decl(typedArrays.ts, 46, 7)) ->Int16Array.from : Symbol(Int16ArrayConstructor.from, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) +>Int16Array.from : Symbol(Int16ArrayConstructor.from, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) >Int16Array : Symbol(Int16Array, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --)) ->from : Symbol(Int16ArrayConstructor.from, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) +>from : Symbol(Int16ArrayConstructor.from, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) >obj : Symbol(obj, Decl(typedArrays.ts, 45, 44)) typedArrays[3] = Uint16Array.from(obj); >typedArrays : Symbol(typedArrays, Decl(typedArrays.ts, 46, 7)) ->Uint16Array.from : Symbol(Uint16ArrayConstructor.from, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) +>Uint16Array.from : Symbol(Uint16ArrayConstructor.from, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) >Uint16Array : Symbol(Uint16Array, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --)) ->from : Symbol(Uint16ArrayConstructor.from, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) +>from : Symbol(Uint16ArrayConstructor.from, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) >obj : Symbol(obj, Decl(typedArrays.ts, 45, 44)) typedArrays[4] = Int32Array.from(obj); >typedArrays : Symbol(typedArrays, Decl(typedArrays.ts, 46, 7)) ->Int32Array.from : Symbol(Int32ArrayConstructor.from, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) +>Int32Array.from : Symbol(Int32ArrayConstructor.from, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) >Int32Array : Symbol(Int32Array, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --)) ->from : Symbol(Int32ArrayConstructor.from, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) +>from : Symbol(Int32ArrayConstructor.from, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) >obj : Symbol(obj, Decl(typedArrays.ts, 45, 44)) typedArrays[5] = Uint32Array.from(obj); >typedArrays : Symbol(typedArrays, Decl(typedArrays.ts, 46, 7)) ->Uint32Array.from : Symbol(Uint32ArrayConstructor.from, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) +>Uint32Array.from : Symbol(Uint32ArrayConstructor.from, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) >Uint32Array : Symbol(Uint32Array, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --)) ->from : Symbol(Uint32ArrayConstructor.from, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) +>from : Symbol(Uint32ArrayConstructor.from, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) >obj : Symbol(obj, Decl(typedArrays.ts, 45, 44)) typedArrays[6] = Float32Array.from(obj); >typedArrays : Symbol(typedArrays, Decl(typedArrays.ts, 46, 7)) ->Float32Array.from : Symbol(Float32ArrayConstructor.from, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) +>Float32Array.from : Symbol(Float32ArrayConstructor.from, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) >Float32Array : Symbol(Float32Array, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --)) ->from : Symbol(Float32ArrayConstructor.from, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) +>from : Symbol(Float32ArrayConstructor.from, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) >obj : Symbol(obj, Decl(typedArrays.ts, 45, 44)) typedArrays[7] = Float64Array.from(obj); >typedArrays : Symbol(typedArrays, Decl(typedArrays.ts, 46, 7)) ->Float64Array.from : Symbol(Float64ArrayConstructor.from, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) +>Float64Array.from : Symbol(Float64ArrayConstructor.from, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) >Float64Array : Symbol(Float64Array, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --)) ->from : Symbol(Float64ArrayConstructor.from, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) +>from : Symbol(Float64ArrayConstructor.from, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) >obj : Symbol(obj, Decl(typedArrays.ts, 45, 44)) typedArrays[8] = Uint8ClampedArray.from(obj); >typedArrays : Symbol(typedArrays, Decl(typedArrays.ts, 46, 7)) ->Uint8ClampedArray.from : Symbol(Uint8ClampedArrayConstructor.from, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) +>Uint8ClampedArray.from : Symbol(Uint8ClampedArrayConstructor.from, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) >Uint8ClampedArray : Symbol(Uint8ClampedArray, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --)) ->from : Symbol(Uint8ClampedArrayConstructor.from, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) +>from : Symbol(Uint8ClampedArrayConstructor.from, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) >obj : Symbol(obj, Decl(typedArrays.ts, 45, 44)) return typedArrays; @@ -241,65 +241,65 @@ function CreateIntegerTypedArraysFromArrayLike(obj:ArrayLike) { typedArrays[0] = Int8Array.from(obj); >typedArrays : Symbol(typedArrays, Decl(typedArrays.ts, 61, 7)) ->Int8Array.from : Symbol(Int8ArrayConstructor.from, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) +>Int8Array.from : Symbol(Int8ArrayConstructor.from, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) >Int8Array : Symbol(Int8Array, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --)) ->from : Symbol(Int8ArrayConstructor.from, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) +>from : Symbol(Int8ArrayConstructor.from, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) >obj : Symbol(obj, Decl(typedArrays.ts, 60, 47)) typedArrays[1] = Uint8Array.from(obj); >typedArrays : Symbol(typedArrays, Decl(typedArrays.ts, 61, 7)) ->Uint8Array.from : Symbol(Uint8ArrayConstructor.from, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) +>Uint8Array.from : Symbol(Uint8ArrayConstructor.from, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) >Uint8Array : Symbol(Uint8Array, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --)) ->from : Symbol(Uint8ArrayConstructor.from, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) +>from : Symbol(Uint8ArrayConstructor.from, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) >obj : Symbol(obj, Decl(typedArrays.ts, 60, 47)) typedArrays[2] = Int16Array.from(obj); >typedArrays : Symbol(typedArrays, Decl(typedArrays.ts, 61, 7)) ->Int16Array.from : Symbol(Int16ArrayConstructor.from, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) +>Int16Array.from : Symbol(Int16ArrayConstructor.from, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) >Int16Array : Symbol(Int16Array, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --)) ->from : Symbol(Int16ArrayConstructor.from, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) +>from : Symbol(Int16ArrayConstructor.from, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) >obj : Symbol(obj, Decl(typedArrays.ts, 60, 47)) typedArrays[3] = Uint16Array.from(obj); >typedArrays : Symbol(typedArrays, Decl(typedArrays.ts, 61, 7)) ->Uint16Array.from : Symbol(Uint16ArrayConstructor.from, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) +>Uint16Array.from : Symbol(Uint16ArrayConstructor.from, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) >Uint16Array : Symbol(Uint16Array, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --)) ->from : Symbol(Uint16ArrayConstructor.from, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) +>from : Symbol(Uint16ArrayConstructor.from, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) >obj : Symbol(obj, Decl(typedArrays.ts, 60, 47)) typedArrays[4] = Int32Array.from(obj); >typedArrays : Symbol(typedArrays, Decl(typedArrays.ts, 61, 7)) ->Int32Array.from : Symbol(Int32ArrayConstructor.from, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) +>Int32Array.from : Symbol(Int32ArrayConstructor.from, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) >Int32Array : Symbol(Int32Array, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --)) ->from : Symbol(Int32ArrayConstructor.from, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) +>from : Symbol(Int32ArrayConstructor.from, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) >obj : Symbol(obj, Decl(typedArrays.ts, 60, 47)) typedArrays[5] = Uint32Array.from(obj); >typedArrays : Symbol(typedArrays, Decl(typedArrays.ts, 61, 7)) ->Uint32Array.from : Symbol(Uint32ArrayConstructor.from, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) +>Uint32Array.from : Symbol(Uint32ArrayConstructor.from, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) >Uint32Array : Symbol(Uint32Array, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --)) ->from : Symbol(Uint32ArrayConstructor.from, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) +>from : Symbol(Uint32ArrayConstructor.from, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) >obj : Symbol(obj, Decl(typedArrays.ts, 60, 47)) typedArrays[6] = Float32Array.from(obj); >typedArrays : Symbol(typedArrays, Decl(typedArrays.ts, 61, 7)) ->Float32Array.from : Symbol(Float32ArrayConstructor.from, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) +>Float32Array.from : Symbol(Float32ArrayConstructor.from, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) >Float32Array : Symbol(Float32Array, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --)) ->from : Symbol(Float32ArrayConstructor.from, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) +>from : Symbol(Float32ArrayConstructor.from, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) >obj : Symbol(obj, Decl(typedArrays.ts, 60, 47)) typedArrays[7] = Float64Array.from(obj); >typedArrays : Symbol(typedArrays, Decl(typedArrays.ts, 61, 7)) ->Float64Array.from : Symbol(Float64ArrayConstructor.from, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) +>Float64Array.from : Symbol(Float64ArrayConstructor.from, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) >Float64Array : Symbol(Float64Array, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --)) ->from : Symbol(Float64ArrayConstructor.from, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) +>from : Symbol(Float64ArrayConstructor.from, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) >obj : Symbol(obj, Decl(typedArrays.ts, 60, 47)) typedArrays[8] = Uint8ClampedArray.from(obj); >typedArrays : Symbol(typedArrays, Decl(typedArrays.ts, 61, 7)) ->Uint8ClampedArray.from : Symbol(Uint8ClampedArrayConstructor.from, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) +>Uint8ClampedArray.from : Symbol(Uint8ClampedArrayConstructor.from, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) >Uint8ClampedArray : Symbol(Uint8ClampedArray, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --)) ->from : Symbol(Uint8ClampedArrayConstructor.from, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) +>from : Symbol(Uint8ClampedArrayConstructor.from, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) >obj : Symbol(obj, Decl(typedArrays.ts, 60, 47)) return typedArrays; @@ -444,186 +444,376 @@ function CreateTypedArraysOf2() { >typedArrays : Symbol(typedArrays, Decl(typedArrays.ts, 91, 7)) } -function CreateTypedArraysFromMapFn(obj:ArrayLike, mapFn: (n:number, v:number)=> number) { ->CreateTypedArraysFromMapFn : Symbol(CreateTypedArraysFromMapFn, Decl(typedArrays.ts, 103, 1)) ->obj : Symbol(obj, Decl(typedArrays.ts, 105, 36)) +function CreateTypedArraysFromMapFn2(obj:ArrayLike, mapFn: (n:T, v:number)=> number) { +>CreateTypedArraysFromMapFn2 : Symbol(CreateTypedArraysFromMapFn2, Decl(typedArrays.ts, 103, 1)) +>T : Symbol(T, Decl(typedArrays.ts, 105, 37)) +>obj : Symbol(obj, Decl(typedArrays.ts, 105, 40)) >ArrayLike : Symbol(ArrayLike, Decl(lib.es5.d.ts, --, --)) ->mapFn : Symbol(mapFn, Decl(typedArrays.ts, 105, 58)) ->n : Symbol(n, Decl(typedArrays.ts, 105, 67)) ->v : Symbol(v, Decl(typedArrays.ts, 105, 76)) +>T : Symbol(T, Decl(typedArrays.ts, 105, 37)) +>mapFn : Symbol(mapFn, Decl(typedArrays.ts, 105, 57)) +>n : Symbol(n, Decl(typedArrays.ts, 105, 66)) +>T : Symbol(T, Decl(typedArrays.ts, 105, 37)) +>v : Symbol(v, Decl(typedArrays.ts, 105, 70)) var typedArrays = []; >typedArrays : Symbol(typedArrays, Decl(typedArrays.ts, 106, 7)) typedArrays[0] = Int8Array.from(obj, mapFn); >typedArrays : Symbol(typedArrays, Decl(typedArrays.ts, 106, 7)) ->Int8Array.from : Symbol(Int8ArrayConstructor.from, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) +>Int8Array.from : Symbol(Int8ArrayConstructor.from, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) >Int8Array : Symbol(Int8Array, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --)) ->from : Symbol(Int8ArrayConstructor.from, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) ->obj : Symbol(obj, Decl(typedArrays.ts, 105, 36)) ->mapFn : Symbol(mapFn, Decl(typedArrays.ts, 105, 58)) +>from : Symbol(Int8ArrayConstructor.from, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) +>obj : Symbol(obj, Decl(typedArrays.ts, 105, 40)) +>mapFn : Symbol(mapFn, Decl(typedArrays.ts, 105, 57)) typedArrays[1] = Uint8Array.from(obj, mapFn); >typedArrays : Symbol(typedArrays, Decl(typedArrays.ts, 106, 7)) ->Uint8Array.from : Symbol(Uint8ArrayConstructor.from, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) +>Uint8Array.from : Symbol(Uint8ArrayConstructor.from, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) >Uint8Array : Symbol(Uint8Array, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --)) ->from : Symbol(Uint8ArrayConstructor.from, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) ->obj : Symbol(obj, Decl(typedArrays.ts, 105, 36)) ->mapFn : Symbol(mapFn, Decl(typedArrays.ts, 105, 58)) +>from : Symbol(Uint8ArrayConstructor.from, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) +>obj : Symbol(obj, Decl(typedArrays.ts, 105, 40)) +>mapFn : Symbol(mapFn, Decl(typedArrays.ts, 105, 57)) typedArrays[2] = Int16Array.from(obj, mapFn); >typedArrays : Symbol(typedArrays, Decl(typedArrays.ts, 106, 7)) ->Int16Array.from : Symbol(Int16ArrayConstructor.from, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) +>Int16Array.from : Symbol(Int16ArrayConstructor.from, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) >Int16Array : Symbol(Int16Array, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --)) ->from : Symbol(Int16ArrayConstructor.from, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) ->obj : Symbol(obj, Decl(typedArrays.ts, 105, 36)) ->mapFn : Symbol(mapFn, Decl(typedArrays.ts, 105, 58)) +>from : Symbol(Int16ArrayConstructor.from, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) +>obj : Symbol(obj, Decl(typedArrays.ts, 105, 40)) +>mapFn : Symbol(mapFn, Decl(typedArrays.ts, 105, 57)) typedArrays[3] = Uint16Array.from(obj, mapFn); >typedArrays : Symbol(typedArrays, Decl(typedArrays.ts, 106, 7)) ->Uint16Array.from : Symbol(Uint16ArrayConstructor.from, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) +>Uint16Array.from : Symbol(Uint16ArrayConstructor.from, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) >Uint16Array : Symbol(Uint16Array, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --)) ->from : Symbol(Uint16ArrayConstructor.from, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) ->obj : Symbol(obj, Decl(typedArrays.ts, 105, 36)) ->mapFn : Symbol(mapFn, Decl(typedArrays.ts, 105, 58)) +>from : Symbol(Uint16ArrayConstructor.from, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) +>obj : Symbol(obj, Decl(typedArrays.ts, 105, 40)) +>mapFn : Symbol(mapFn, Decl(typedArrays.ts, 105, 57)) typedArrays[4] = Int32Array.from(obj, mapFn); >typedArrays : Symbol(typedArrays, Decl(typedArrays.ts, 106, 7)) ->Int32Array.from : Symbol(Int32ArrayConstructor.from, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) +>Int32Array.from : Symbol(Int32ArrayConstructor.from, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) >Int32Array : Symbol(Int32Array, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --)) ->from : Symbol(Int32ArrayConstructor.from, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) ->obj : Symbol(obj, Decl(typedArrays.ts, 105, 36)) ->mapFn : Symbol(mapFn, Decl(typedArrays.ts, 105, 58)) +>from : Symbol(Int32ArrayConstructor.from, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) +>obj : Symbol(obj, Decl(typedArrays.ts, 105, 40)) +>mapFn : Symbol(mapFn, Decl(typedArrays.ts, 105, 57)) typedArrays[5] = Uint32Array.from(obj, mapFn); >typedArrays : Symbol(typedArrays, Decl(typedArrays.ts, 106, 7)) ->Uint32Array.from : Symbol(Uint32ArrayConstructor.from, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) +>Uint32Array.from : Symbol(Uint32ArrayConstructor.from, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) >Uint32Array : Symbol(Uint32Array, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --)) ->from : Symbol(Uint32ArrayConstructor.from, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) ->obj : Symbol(obj, Decl(typedArrays.ts, 105, 36)) ->mapFn : Symbol(mapFn, Decl(typedArrays.ts, 105, 58)) +>from : Symbol(Uint32ArrayConstructor.from, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) +>obj : Symbol(obj, Decl(typedArrays.ts, 105, 40)) +>mapFn : Symbol(mapFn, Decl(typedArrays.ts, 105, 57)) typedArrays[6] = Float32Array.from(obj, mapFn); >typedArrays : Symbol(typedArrays, Decl(typedArrays.ts, 106, 7)) ->Float32Array.from : Symbol(Float32ArrayConstructor.from, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) +>Float32Array.from : Symbol(Float32ArrayConstructor.from, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) >Float32Array : Symbol(Float32Array, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --)) ->from : Symbol(Float32ArrayConstructor.from, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) ->obj : Symbol(obj, Decl(typedArrays.ts, 105, 36)) ->mapFn : Symbol(mapFn, Decl(typedArrays.ts, 105, 58)) +>from : Symbol(Float32ArrayConstructor.from, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) +>obj : Symbol(obj, Decl(typedArrays.ts, 105, 40)) +>mapFn : Symbol(mapFn, Decl(typedArrays.ts, 105, 57)) typedArrays[7] = Float64Array.from(obj, mapFn); >typedArrays : Symbol(typedArrays, Decl(typedArrays.ts, 106, 7)) ->Float64Array.from : Symbol(Float64ArrayConstructor.from, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) +>Float64Array.from : Symbol(Float64ArrayConstructor.from, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) >Float64Array : Symbol(Float64Array, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --)) ->from : Symbol(Float64ArrayConstructor.from, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) ->obj : Symbol(obj, Decl(typedArrays.ts, 105, 36)) ->mapFn : Symbol(mapFn, Decl(typedArrays.ts, 105, 58)) +>from : Symbol(Float64ArrayConstructor.from, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) +>obj : Symbol(obj, Decl(typedArrays.ts, 105, 40)) +>mapFn : Symbol(mapFn, Decl(typedArrays.ts, 105, 57)) typedArrays[8] = Uint8ClampedArray.from(obj, mapFn); >typedArrays : Symbol(typedArrays, Decl(typedArrays.ts, 106, 7)) ->Uint8ClampedArray.from : Symbol(Uint8ClampedArrayConstructor.from, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) +>Uint8ClampedArray.from : Symbol(Uint8ClampedArrayConstructor.from, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) >Uint8ClampedArray : Symbol(Uint8ClampedArray, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --)) ->from : Symbol(Uint8ClampedArrayConstructor.from, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) ->obj : Symbol(obj, Decl(typedArrays.ts, 105, 36)) ->mapFn : Symbol(mapFn, Decl(typedArrays.ts, 105, 58)) +>from : Symbol(Uint8ClampedArrayConstructor.from, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) +>obj : Symbol(obj, Decl(typedArrays.ts, 105, 40)) +>mapFn : Symbol(mapFn, Decl(typedArrays.ts, 105, 57)) return typedArrays; >typedArrays : Symbol(typedArrays, Decl(typedArrays.ts, 106, 7)) } -function CreateTypedArraysFromThisObj(obj:ArrayLike, mapFn: (n:number, v:number)=> number, thisArg: {}) { ->CreateTypedArraysFromThisObj : Symbol(CreateTypedArraysFromThisObj, Decl(typedArrays.ts, 118, 1)) ->obj : Symbol(obj, Decl(typedArrays.ts, 120, 38)) +function CreateTypedArraysFromMapFn(obj:ArrayLike, mapFn: (n:number, v:number)=> number) { +>CreateTypedArraysFromMapFn : Symbol(CreateTypedArraysFromMapFn, Decl(typedArrays.ts, 118, 1)) +>obj : Symbol(obj, Decl(typedArrays.ts, 120, 36)) >ArrayLike : Symbol(ArrayLike, Decl(lib.es5.d.ts, --, --)) ->mapFn : Symbol(mapFn, Decl(typedArrays.ts, 120, 60)) ->n : Symbol(n, Decl(typedArrays.ts, 120, 69)) ->v : Symbol(v, Decl(typedArrays.ts, 120, 78)) ->thisArg : Symbol(thisArg, Decl(typedArrays.ts, 120, 98)) +>mapFn : Symbol(mapFn, Decl(typedArrays.ts, 120, 58)) +>n : Symbol(n, Decl(typedArrays.ts, 120, 67)) +>v : Symbol(v, Decl(typedArrays.ts, 120, 76)) var typedArrays = []; >typedArrays : Symbol(typedArrays, Decl(typedArrays.ts, 121, 7)) - typedArrays[0] = Int8Array.from(obj, mapFn, thisArg); + typedArrays[0] = Int8Array.from(obj, mapFn); >typedArrays : Symbol(typedArrays, Decl(typedArrays.ts, 121, 7)) ->Int8Array.from : Symbol(Int8ArrayConstructor.from, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) +>Int8Array.from : Symbol(Int8ArrayConstructor.from, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) >Int8Array : Symbol(Int8Array, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --)) ->from : Symbol(Int8ArrayConstructor.from, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) ->obj : Symbol(obj, Decl(typedArrays.ts, 120, 38)) ->mapFn : Symbol(mapFn, Decl(typedArrays.ts, 120, 60)) ->thisArg : Symbol(thisArg, Decl(typedArrays.ts, 120, 98)) +>from : Symbol(Int8ArrayConstructor.from, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) +>obj : Symbol(obj, Decl(typedArrays.ts, 120, 36)) +>mapFn : Symbol(mapFn, Decl(typedArrays.ts, 120, 58)) - typedArrays[1] = Uint8Array.from(obj, mapFn, thisArg); + typedArrays[1] = Uint8Array.from(obj, mapFn); >typedArrays : Symbol(typedArrays, Decl(typedArrays.ts, 121, 7)) ->Uint8Array.from : Symbol(Uint8ArrayConstructor.from, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) +>Uint8Array.from : Symbol(Uint8ArrayConstructor.from, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) >Uint8Array : Symbol(Uint8Array, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --)) ->from : Symbol(Uint8ArrayConstructor.from, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) ->obj : Symbol(obj, Decl(typedArrays.ts, 120, 38)) ->mapFn : Symbol(mapFn, Decl(typedArrays.ts, 120, 60)) ->thisArg : Symbol(thisArg, Decl(typedArrays.ts, 120, 98)) +>from : Symbol(Uint8ArrayConstructor.from, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) +>obj : Symbol(obj, Decl(typedArrays.ts, 120, 36)) +>mapFn : Symbol(mapFn, Decl(typedArrays.ts, 120, 58)) - typedArrays[2] = Int16Array.from(obj, mapFn, thisArg); + typedArrays[2] = Int16Array.from(obj, mapFn); >typedArrays : Symbol(typedArrays, Decl(typedArrays.ts, 121, 7)) ->Int16Array.from : Symbol(Int16ArrayConstructor.from, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) +>Int16Array.from : Symbol(Int16ArrayConstructor.from, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) >Int16Array : Symbol(Int16Array, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --)) ->from : Symbol(Int16ArrayConstructor.from, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) ->obj : Symbol(obj, Decl(typedArrays.ts, 120, 38)) ->mapFn : Symbol(mapFn, Decl(typedArrays.ts, 120, 60)) ->thisArg : Symbol(thisArg, Decl(typedArrays.ts, 120, 98)) +>from : Symbol(Int16ArrayConstructor.from, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) +>obj : Symbol(obj, Decl(typedArrays.ts, 120, 36)) +>mapFn : Symbol(mapFn, Decl(typedArrays.ts, 120, 58)) - typedArrays[3] = Uint16Array.from(obj, mapFn, thisArg); + typedArrays[3] = Uint16Array.from(obj, mapFn); >typedArrays : Symbol(typedArrays, Decl(typedArrays.ts, 121, 7)) ->Uint16Array.from : Symbol(Uint16ArrayConstructor.from, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) +>Uint16Array.from : Symbol(Uint16ArrayConstructor.from, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) >Uint16Array : Symbol(Uint16Array, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --)) ->from : Symbol(Uint16ArrayConstructor.from, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) ->obj : Symbol(obj, Decl(typedArrays.ts, 120, 38)) ->mapFn : Symbol(mapFn, Decl(typedArrays.ts, 120, 60)) ->thisArg : Symbol(thisArg, Decl(typedArrays.ts, 120, 98)) +>from : Symbol(Uint16ArrayConstructor.from, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) +>obj : Symbol(obj, Decl(typedArrays.ts, 120, 36)) +>mapFn : Symbol(mapFn, Decl(typedArrays.ts, 120, 58)) - typedArrays[4] = Int32Array.from(obj, mapFn, thisArg); + typedArrays[4] = Int32Array.from(obj, mapFn); >typedArrays : Symbol(typedArrays, Decl(typedArrays.ts, 121, 7)) ->Int32Array.from : Symbol(Int32ArrayConstructor.from, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) +>Int32Array.from : Symbol(Int32ArrayConstructor.from, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) >Int32Array : Symbol(Int32Array, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --)) ->from : Symbol(Int32ArrayConstructor.from, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) ->obj : Symbol(obj, Decl(typedArrays.ts, 120, 38)) ->mapFn : Symbol(mapFn, Decl(typedArrays.ts, 120, 60)) ->thisArg : Symbol(thisArg, Decl(typedArrays.ts, 120, 98)) +>from : Symbol(Int32ArrayConstructor.from, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) +>obj : Symbol(obj, Decl(typedArrays.ts, 120, 36)) +>mapFn : Symbol(mapFn, Decl(typedArrays.ts, 120, 58)) - typedArrays[5] = Uint32Array.from(obj, mapFn, thisArg); + typedArrays[5] = Uint32Array.from(obj, mapFn); >typedArrays : Symbol(typedArrays, Decl(typedArrays.ts, 121, 7)) ->Uint32Array.from : Symbol(Uint32ArrayConstructor.from, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) +>Uint32Array.from : Symbol(Uint32ArrayConstructor.from, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) >Uint32Array : Symbol(Uint32Array, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --)) ->from : Symbol(Uint32ArrayConstructor.from, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) ->obj : Symbol(obj, Decl(typedArrays.ts, 120, 38)) ->mapFn : Symbol(mapFn, Decl(typedArrays.ts, 120, 60)) ->thisArg : Symbol(thisArg, Decl(typedArrays.ts, 120, 98)) +>from : Symbol(Uint32ArrayConstructor.from, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) +>obj : Symbol(obj, Decl(typedArrays.ts, 120, 36)) +>mapFn : Symbol(mapFn, Decl(typedArrays.ts, 120, 58)) - typedArrays[6] = Float32Array.from(obj, mapFn, thisArg); + typedArrays[6] = Float32Array.from(obj, mapFn); >typedArrays : Symbol(typedArrays, Decl(typedArrays.ts, 121, 7)) ->Float32Array.from : Symbol(Float32ArrayConstructor.from, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) +>Float32Array.from : Symbol(Float32ArrayConstructor.from, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) >Float32Array : Symbol(Float32Array, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --)) ->from : Symbol(Float32ArrayConstructor.from, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) ->obj : Symbol(obj, Decl(typedArrays.ts, 120, 38)) ->mapFn : Symbol(mapFn, Decl(typedArrays.ts, 120, 60)) ->thisArg : Symbol(thisArg, Decl(typedArrays.ts, 120, 98)) +>from : Symbol(Float32ArrayConstructor.from, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) +>obj : Symbol(obj, Decl(typedArrays.ts, 120, 36)) +>mapFn : Symbol(mapFn, Decl(typedArrays.ts, 120, 58)) - typedArrays[7] = Float64Array.from(obj, mapFn, thisArg); + typedArrays[7] = Float64Array.from(obj, mapFn); >typedArrays : Symbol(typedArrays, Decl(typedArrays.ts, 121, 7)) ->Float64Array.from : Symbol(Float64ArrayConstructor.from, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) +>Float64Array.from : Symbol(Float64ArrayConstructor.from, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) >Float64Array : Symbol(Float64Array, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --)) ->from : Symbol(Float64ArrayConstructor.from, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) ->obj : Symbol(obj, Decl(typedArrays.ts, 120, 38)) ->mapFn : Symbol(mapFn, Decl(typedArrays.ts, 120, 60)) ->thisArg : Symbol(thisArg, Decl(typedArrays.ts, 120, 98)) +>from : Symbol(Float64ArrayConstructor.from, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) +>obj : Symbol(obj, Decl(typedArrays.ts, 120, 36)) +>mapFn : Symbol(mapFn, Decl(typedArrays.ts, 120, 58)) - typedArrays[8] = Uint8ClampedArray.from(obj, mapFn, thisArg); + typedArrays[8] = Uint8ClampedArray.from(obj, mapFn); >typedArrays : Symbol(typedArrays, Decl(typedArrays.ts, 121, 7)) ->Uint8ClampedArray.from : Symbol(Uint8ClampedArrayConstructor.from, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) +>Uint8ClampedArray.from : Symbol(Uint8ClampedArrayConstructor.from, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) >Uint8ClampedArray : Symbol(Uint8ClampedArray, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --)) ->from : Symbol(Uint8ClampedArrayConstructor.from, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) ->obj : Symbol(obj, Decl(typedArrays.ts, 120, 38)) ->mapFn : Symbol(mapFn, Decl(typedArrays.ts, 120, 60)) ->thisArg : Symbol(thisArg, Decl(typedArrays.ts, 120, 98)) +>from : Symbol(Uint8ClampedArrayConstructor.from, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) +>obj : Symbol(obj, Decl(typedArrays.ts, 120, 36)) +>mapFn : Symbol(mapFn, Decl(typedArrays.ts, 120, 58)) return typedArrays; >typedArrays : Symbol(typedArrays, Decl(typedArrays.ts, 121, 7)) } + +function CreateTypedArraysFromThisObj(obj:ArrayLike, mapFn: (n:number, v:number)=> number, thisArg: {}) { +>CreateTypedArraysFromThisObj : Symbol(CreateTypedArraysFromThisObj, Decl(typedArrays.ts, 133, 1)) +>obj : Symbol(obj, Decl(typedArrays.ts, 135, 38)) +>ArrayLike : Symbol(ArrayLike, Decl(lib.es5.d.ts, --, --)) +>mapFn : Symbol(mapFn, Decl(typedArrays.ts, 135, 60)) +>n : Symbol(n, Decl(typedArrays.ts, 135, 69)) +>v : Symbol(v, Decl(typedArrays.ts, 135, 78)) +>thisArg : Symbol(thisArg, Decl(typedArrays.ts, 135, 98)) + + var typedArrays = []; +>typedArrays : Symbol(typedArrays, Decl(typedArrays.ts, 136, 7)) + + typedArrays[0] = Int8Array.from(obj, mapFn, thisArg); +>typedArrays : Symbol(typedArrays, Decl(typedArrays.ts, 136, 7)) +>Int8Array.from : Symbol(Int8ArrayConstructor.from, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) +>Int8Array : Symbol(Int8Array, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --)) +>from : Symbol(Int8ArrayConstructor.from, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) +>obj : Symbol(obj, Decl(typedArrays.ts, 135, 38)) +>mapFn : Symbol(mapFn, Decl(typedArrays.ts, 135, 60)) +>thisArg : Symbol(thisArg, Decl(typedArrays.ts, 135, 98)) + + typedArrays[1] = Uint8Array.from(obj, mapFn, thisArg); +>typedArrays : Symbol(typedArrays, Decl(typedArrays.ts, 136, 7)) +>Uint8Array.from : Symbol(Uint8ArrayConstructor.from, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) +>Uint8Array : Symbol(Uint8Array, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --)) +>from : Symbol(Uint8ArrayConstructor.from, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) +>obj : Symbol(obj, Decl(typedArrays.ts, 135, 38)) +>mapFn : Symbol(mapFn, Decl(typedArrays.ts, 135, 60)) +>thisArg : Symbol(thisArg, Decl(typedArrays.ts, 135, 98)) + + typedArrays[2] = Int16Array.from(obj, mapFn, thisArg); +>typedArrays : Symbol(typedArrays, Decl(typedArrays.ts, 136, 7)) +>Int16Array.from : Symbol(Int16ArrayConstructor.from, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) +>Int16Array : Symbol(Int16Array, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --)) +>from : Symbol(Int16ArrayConstructor.from, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) +>obj : Symbol(obj, Decl(typedArrays.ts, 135, 38)) +>mapFn : Symbol(mapFn, Decl(typedArrays.ts, 135, 60)) +>thisArg : Symbol(thisArg, Decl(typedArrays.ts, 135, 98)) + + typedArrays[3] = Uint16Array.from(obj, mapFn, thisArg); +>typedArrays : Symbol(typedArrays, Decl(typedArrays.ts, 136, 7)) +>Uint16Array.from : Symbol(Uint16ArrayConstructor.from, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) +>Uint16Array : Symbol(Uint16Array, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --)) +>from : Symbol(Uint16ArrayConstructor.from, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) +>obj : Symbol(obj, Decl(typedArrays.ts, 135, 38)) +>mapFn : Symbol(mapFn, Decl(typedArrays.ts, 135, 60)) +>thisArg : Symbol(thisArg, Decl(typedArrays.ts, 135, 98)) + + typedArrays[4] = Int32Array.from(obj, mapFn, thisArg); +>typedArrays : Symbol(typedArrays, Decl(typedArrays.ts, 136, 7)) +>Int32Array.from : Symbol(Int32ArrayConstructor.from, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) +>Int32Array : Symbol(Int32Array, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --)) +>from : Symbol(Int32ArrayConstructor.from, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) +>obj : Symbol(obj, Decl(typedArrays.ts, 135, 38)) +>mapFn : Symbol(mapFn, Decl(typedArrays.ts, 135, 60)) +>thisArg : Symbol(thisArg, Decl(typedArrays.ts, 135, 98)) + + typedArrays[5] = Uint32Array.from(obj, mapFn, thisArg); +>typedArrays : Symbol(typedArrays, Decl(typedArrays.ts, 136, 7)) +>Uint32Array.from : Symbol(Uint32ArrayConstructor.from, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) +>Uint32Array : Symbol(Uint32Array, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --)) +>from : Symbol(Uint32ArrayConstructor.from, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) +>obj : Symbol(obj, Decl(typedArrays.ts, 135, 38)) +>mapFn : Symbol(mapFn, Decl(typedArrays.ts, 135, 60)) +>thisArg : Symbol(thisArg, Decl(typedArrays.ts, 135, 98)) + + typedArrays[6] = Float32Array.from(obj, mapFn, thisArg); +>typedArrays : Symbol(typedArrays, Decl(typedArrays.ts, 136, 7)) +>Float32Array.from : Symbol(Float32ArrayConstructor.from, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) +>Float32Array : Symbol(Float32Array, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --)) +>from : Symbol(Float32ArrayConstructor.from, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) +>obj : Symbol(obj, Decl(typedArrays.ts, 135, 38)) +>mapFn : Symbol(mapFn, Decl(typedArrays.ts, 135, 60)) +>thisArg : Symbol(thisArg, Decl(typedArrays.ts, 135, 98)) + + typedArrays[7] = Float64Array.from(obj, mapFn, thisArg); +>typedArrays : Symbol(typedArrays, Decl(typedArrays.ts, 136, 7)) +>Float64Array.from : Symbol(Float64ArrayConstructor.from, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) +>Float64Array : Symbol(Float64Array, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --)) +>from : Symbol(Float64ArrayConstructor.from, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) +>obj : Symbol(obj, Decl(typedArrays.ts, 135, 38)) +>mapFn : Symbol(mapFn, Decl(typedArrays.ts, 135, 60)) +>thisArg : Symbol(thisArg, Decl(typedArrays.ts, 135, 98)) + + typedArrays[8] = Uint8ClampedArray.from(obj, mapFn, thisArg); +>typedArrays : Symbol(typedArrays, Decl(typedArrays.ts, 136, 7)) +>Uint8ClampedArray.from : Symbol(Uint8ClampedArrayConstructor.from, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) +>Uint8ClampedArray : Symbol(Uint8ClampedArray, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --)) +>from : Symbol(Uint8ClampedArrayConstructor.from, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) +>obj : Symbol(obj, Decl(typedArrays.ts, 135, 38)) +>mapFn : Symbol(mapFn, Decl(typedArrays.ts, 135, 60)) +>thisArg : Symbol(thisArg, Decl(typedArrays.ts, 135, 98)) + + return typedArrays; +>typedArrays : Symbol(typedArrays, Decl(typedArrays.ts, 136, 7)) +} + +function CreateTypedArraysFromThisObj2(obj:ArrayLike, mapFn: (n:T, v:number)=> number, thisArg: {}) { +>CreateTypedArraysFromThisObj2 : Symbol(CreateTypedArraysFromThisObj2, Decl(typedArrays.ts, 148, 1)) +>T : Symbol(T, Decl(typedArrays.ts, 150, 39)) +>obj : Symbol(obj, Decl(typedArrays.ts, 150, 42)) +>ArrayLike : Symbol(ArrayLike, Decl(lib.es5.d.ts, --, --)) +>T : Symbol(T, Decl(typedArrays.ts, 150, 39)) +>mapFn : Symbol(mapFn, Decl(typedArrays.ts, 150, 59)) +>n : Symbol(n, Decl(typedArrays.ts, 150, 68)) +>T : Symbol(T, Decl(typedArrays.ts, 150, 39)) +>v : Symbol(v, Decl(typedArrays.ts, 150, 72)) +>thisArg : Symbol(thisArg, Decl(typedArrays.ts, 150, 92)) + + var typedArrays = []; +>typedArrays : Symbol(typedArrays, Decl(typedArrays.ts, 151, 7)) + + typedArrays[0] = Int8Array.from(obj, mapFn, thisArg); +>typedArrays : Symbol(typedArrays, Decl(typedArrays.ts, 151, 7)) +>Int8Array.from : Symbol(Int8ArrayConstructor.from, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) +>Int8Array : Symbol(Int8Array, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --)) +>from : Symbol(Int8ArrayConstructor.from, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) +>obj : Symbol(obj, Decl(typedArrays.ts, 150, 42)) +>mapFn : Symbol(mapFn, Decl(typedArrays.ts, 150, 59)) +>thisArg : Symbol(thisArg, Decl(typedArrays.ts, 150, 92)) + + typedArrays[1] = Uint8Array.from(obj, mapFn, thisArg); +>typedArrays : Symbol(typedArrays, Decl(typedArrays.ts, 151, 7)) +>Uint8Array.from : Symbol(Uint8ArrayConstructor.from, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) +>Uint8Array : Symbol(Uint8Array, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --)) +>from : Symbol(Uint8ArrayConstructor.from, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) +>obj : Symbol(obj, Decl(typedArrays.ts, 150, 42)) +>mapFn : Symbol(mapFn, Decl(typedArrays.ts, 150, 59)) +>thisArg : Symbol(thisArg, Decl(typedArrays.ts, 150, 92)) + + typedArrays[2] = Int16Array.from(obj, mapFn, thisArg); +>typedArrays : Symbol(typedArrays, Decl(typedArrays.ts, 151, 7)) +>Int16Array.from : Symbol(Int16ArrayConstructor.from, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) +>Int16Array : Symbol(Int16Array, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --)) +>from : Symbol(Int16ArrayConstructor.from, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) +>obj : Symbol(obj, Decl(typedArrays.ts, 150, 42)) +>mapFn : Symbol(mapFn, Decl(typedArrays.ts, 150, 59)) +>thisArg : Symbol(thisArg, Decl(typedArrays.ts, 150, 92)) + + typedArrays[3] = Uint16Array.from(obj, mapFn, thisArg); +>typedArrays : Symbol(typedArrays, Decl(typedArrays.ts, 151, 7)) +>Uint16Array.from : Symbol(Uint16ArrayConstructor.from, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) +>Uint16Array : Symbol(Uint16Array, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --)) +>from : Symbol(Uint16ArrayConstructor.from, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) +>obj : Symbol(obj, Decl(typedArrays.ts, 150, 42)) +>mapFn : Symbol(mapFn, Decl(typedArrays.ts, 150, 59)) +>thisArg : Symbol(thisArg, Decl(typedArrays.ts, 150, 92)) + + typedArrays[4] = Int32Array.from(obj, mapFn, thisArg); +>typedArrays : Symbol(typedArrays, Decl(typedArrays.ts, 151, 7)) +>Int32Array.from : Symbol(Int32ArrayConstructor.from, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) +>Int32Array : Symbol(Int32Array, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --)) +>from : Symbol(Int32ArrayConstructor.from, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) +>obj : Symbol(obj, Decl(typedArrays.ts, 150, 42)) +>mapFn : Symbol(mapFn, Decl(typedArrays.ts, 150, 59)) +>thisArg : Symbol(thisArg, Decl(typedArrays.ts, 150, 92)) + + typedArrays[5] = Uint32Array.from(obj, mapFn, thisArg); +>typedArrays : Symbol(typedArrays, Decl(typedArrays.ts, 151, 7)) +>Uint32Array.from : Symbol(Uint32ArrayConstructor.from, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) +>Uint32Array : Symbol(Uint32Array, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --)) +>from : Symbol(Uint32ArrayConstructor.from, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) +>obj : Symbol(obj, Decl(typedArrays.ts, 150, 42)) +>mapFn : Symbol(mapFn, Decl(typedArrays.ts, 150, 59)) +>thisArg : Symbol(thisArg, Decl(typedArrays.ts, 150, 92)) + + typedArrays[6] = Float32Array.from(obj, mapFn, thisArg); +>typedArrays : Symbol(typedArrays, Decl(typedArrays.ts, 151, 7)) +>Float32Array.from : Symbol(Float32ArrayConstructor.from, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) +>Float32Array : Symbol(Float32Array, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --)) +>from : Symbol(Float32ArrayConstructor.from, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) +>obj : Symbol(obj, Decl(typedArrays.ts, 150, 42)) +>mapFn : Symbol(mapFn, Decl(typedArrays.ts, 150, 59)) +>thisArg : Symbol(thisArg, Decl(typedArrays.ts, 150, 92)) + + typedArrays[7] = Float64Array.from(obj, mapFn, thisArg); +>typedArrays : Symbol(typedArrays, Decl(typedArrays.ts, 151, 7)) +>Float64Array.from : Symbol(Float64ArrayConstructor.from, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) +>Float64Array : Symbol(Float64Array, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --)) +>from : Symbol(Float64ArrayConstructor.from, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) +>obj : Symbol(obj, Decl(typedArrays.ts, 150, 42)) +>mapFn : Symbol(mapFn, Decl(typedArrays.ts, 150, 59)) +>thisArg : Symbol(thisArg, Decl(typedArrays.ts, 150, 92)) + + typedArrays[8] = Uint8ClampedArray.from(obj, mapFn, thisArg); +>typedArrays : Symbol(typedArrays, Decl(typedArrays.ts, 151, 7)) +>Uint8ClampedArray.from : Symbol(Uint8ClampedArrayConstructor.from, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) +>Uint8ClampedArray : Symbol(Uint8ClampedArray, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --)) +>from : Symbol(Uint8ClampedArrayConstructor.from, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) +>obj : Symbol(obj, Decl(typedArrays.ts, 150, 42)) +>mapFn : Symbol(mapFn, Decl(typedArrays.ts, 150, 59)) +>thisArg : Symbol(thisArg, Decl(typedArrays.ts, 150, 92)) + + return typedArrays; +>typedArrays : Symbol(typedArrays, Decl(typedArrays.ts, 151, 7)) +} diff --git a/tests/baselines/reference/typedArrays.types b/tests/baselines/reference/typedArrays.types index af74b8ba709..5cd4879be7e 100644 --- a/tests/baselines/reference/typedArrays.types +++ b/tests/baselines/reference/typedArrays.types @@ -273,9 +273,9 @@ function CreateIntegerTypedArraysFromArray2(obj:number[]) { >typedArrays : any[] >0 : 0 >Int8Array.from(obj) : Int8Array ->Int8Array.from : { (arrayLike: ArrayLike, mapfn?: (v: number, k: number) => number, thisArg?: any): Int8Array; (arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Int8Array; } +>Int8Array.from : { (arrayLike: ArrayLike): Int8Array; (arrayLike: ArrayLike, mapfn: (v: T, k: number) => number, thisArg?: any): Int8Array; (arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Int8Array; } >Int8Array : Int8ArrayConstructor ->from : { (arrayLike: ArrayLike, mapfn?: (v: number, k: number) => number, thisArg?: any): Int8Array; (arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Int8Array; } +>from : { (arrayLike: ArrayLike): Int8Array; (arrayLike: ArrayLike, mapfn: (v: T, k: number) => number, thisArg?: any): Int8Array; (arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Int8Array; } >obj : number[] typedArrays[1] = Uint8Array.from(obj); @@ -284,9 +284,9 @@ function CreateIntegerTypedArraysFromArray2(obj:number[]) { >typedArrays : any[] >1 : 1 >Uint8Array.from(obj) : Uint8Array ->Uint8Array.from : { (arrayLike: ArrayLike, mapfn?: (v: number, k: number) => number, thisArg?: any): Uint8Array; (arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Uint8Array; } +>Uint8Array.from : { (arrayLike: ArrayLike): Uint8Array; (arrayLike: ArrayLike, mapfn: (v: T, k: number) => number, thisArg?: any): Uint8Array; (arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Uint8Array; } >Uint8Array : Uint8ArrayConstructor ->from : { (arrayLike: ArrayLike, mapfn?: (v: number, k: number) => number, thisArg?: any): Uint8Array; (arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Uint8Array; } +>from : { (arrayLike: ArrayLike): Uint8Array; (arrayLike: ArrayLike, mapfn: (v: T, k: number) => number, thisArg?: any): Uint8Array; (arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Uint8Array; } >obj : number[] typedArrays[2] = Int16Array.from(obj); @@ -295,9 +295,9 @@ function CreateIntegerTypedArraysFromArray2(obj:number[]) { >typedArrays : any[] >2 : 2 >Int16Array.from(obj) : Int16Array ->Int16Array.from : { (arrayLike: ArrayLike, mapfn?: (v: number, k: number) => number, thisArg?: any): Int16Array; (arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Int16Array; } +>Int16Array.from : { (arrayLike: ArrayLike): Int16Array; (arrayLike: ArrayLike, mapfn: (v: T, k: number) => number, thisArg?: any): Int16Array; (arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Int16Array; } >Int16Array : Int16ArrayConstructor ->from : { (arrayLike: ArrayLike, mapfn?: (v: number, k: number) => number, thisArg?: any): Int16Array; (arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Int16Array; } +>from : { (arrayLike: ArrayLike): Int16Array; (arrayLike: ArrayLike, mapfn: (v: T, k: number) => number, thisArg?: any): Int16Array; (arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Int16Array; } >obj : number[] typedArrays[3] = Uint16Array.from(obj); @@ -306,9 +306,9 @@ function CreateIntegerTypedArraysFromArray2(obj:number[]) { >typedArrays : any[] >3 : 3 >Uint16Array.from(obj) : Uint16Array ->Uint16Array.from : { (arrayLike: ArrayLike, mapfn?: (v: number, k: number) => number, thisArg?: any): Uint16Array; (arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Uint16Array; } +>Uint16Array.from : { (arrayLike: ArrayLike): Uint16Array; (arrayLike: ArrayLike, mapfn: (v: T, k: number) => number, thisArg?: any): Uint16Array; (arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Uint16Array; } >Uint16Array : Uint16ArrayConstructor ->from : { (arrayLike: ArrayLike, mapfn?: (v: number, k: number) => number, thisArg?: any): Uint16Array; (arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Uint16Array; } +>from : { (arrayLike: ArrayLike): Uint16Array; (arrayLike: ArrayLike, mapfn: (v: T, k: number) => number, thisArg?: any): Uint16Array; (arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Uint16Array; } >obj : number[] typedArrays[4] = Int32Array.from(obj); @@ -317,9 +317,9 @@ function CreateIntegerTypedArraysFromArray2(obj:number[]) { >typedArrays : any[] >4 : 4 >Int32Array.from(obj) : Int32Array ->Int32Array.from : { (arrayLike: ArrayLike, mapfn?: (v: number, k: number) => number, thisArg?: any): Int32Array; (arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Int32Array; } +>Int32Array.from : { (arrayLike: ArrayLike): Int32Array; (arrayLike: ArrayLike, mapfn: (v: T, k: number) => number, thisArg?: any): Int32Array; (arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Int32Array; } >Int32Array : Int32ArrayConstructor ->from : { (arrayLike: ArrayLike, mapfn?: (v: number, k: number) => number, thisArg?: any): Int32Array; (arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Int32Array; } +>from : { (arrayLike: ArrayLike): Int32Array; (arrayLike: ArrayLike, mapfn: (v: T, k: number) => number, thisArg?: any): Int32Array; (arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Int32Array; } >obj : number[] typedArrays[5] = Uint32Array.from(obj); @@ -328,9 +328,9 @@ function CreateIntegerTypedArraysFromArray2(obj:number[]) { >typedArrays : any[] >5 : 5 >Uint32Array.from(obj) : Uint32Array ->Uint32Array.from : { (arrayLike: ArrayLike, mapfn?: (v: number, k: number) => number, thisArg?: any): Uint32Array; (arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Uint32Array; } +>Uint32Array.from : { (arrayLike: ArrayLike): Uint32Array; (arrayLike: ArrayLike, mapfn: (v: T, k: number) => number, thisArg?: any): Uint32Array; (arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Uint32Array; } >Uint32Array : Uint32ArrayConstructor ->from : { (arrayLike: ArrayLike, mapfn?: (v: number, k: number) => number, thisArg?: any): Uint32Array; (arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Uint32Array; } +>from : { (arrayLike: ArrayLike): Uint32Array; (arrayLike: ArrayLike, mapfn: (v: T, k: number) => number, thisArg?: any): Uint32Array; (arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Uint32Array; } >obj : number[] typedArrays[6] = Float32Array.from(obj); @@ -339,9 +339,9 @@ function CreateIntegerTypedArraysFromArray2(obj:number[]) { >typedArrays : any[] >6 : 6 >Float32Array.from(obj) : Float32Array ->Float32Array.from : { (arrayLike: ArrayLike, mapfn?: (v: number, k: number) => number, thisArg?: any): Float32Array; (arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Float32Array; } +>Float32Array.from : { (arrayLike: ArrayLike): Float32Array; (arrayLike: ArrayLike, mapfn: (v: T, k: number) => number, thisArg?: any): Float32Array; (arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Float32Array; } >Float32Array : Float32ArrayConstructor ->from : { (arrayLike: ArrayLike, mapfn?: (v: number, k: number) => number, thisArg?: any): Float32Array; (arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Float32Array; } +>from : { (arrayLike: ArrayLike): Float32Array; (arrayLike: ArrayLike, mapfn: (v: T, k: number) => number, thisArg?: any): Float32Array; (arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Float32Array; } >obj : number[] typedArrays[7] = Float64Array.from(obj); @@ -350,9 +350,9 @@ function CreateIntegerTypedArraysFromArray2(obj:number[]) { >typedArrays : any[] >7 : 7 >Float64Array.from(obj) : Float64Array ->Float64Array.from : { (arrayLike: ArrayLike, mapfn?: (v: number, k: number) => number, thisArg?: any): Float64Array; (arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Float64Array; } +>Float64Array.from : { (arrayLike: ArrayLike): Float64Array; (arrayLike: ArrayLike, mapfn: (v: T, k: number) => number, thisArg?: any): Float64Array; (arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Float64Array; } >Float64Array : Float64ArrayConstructor ->from : { (arrayLike: ArrayLike, mapfn?: (v: number, k: number) => number, thisArg?: any): Float64Array; (arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Float64Array; } +>from : { (arrayLike: ArrayLike): Float64Array; (arrayLike: ArrayLike, mapfn: (v: T, k: number) => number, thisArg?: any): Float64Array; (arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Float64Array; } >obj : number[] typedArrays[8] = Uint8ClampedArray.from(obj); @@ -361,9 +361,9 @@ function CreateIntegerTypedArraysFromArray2(obj:number[]) { >typedArrays : any[] >8 : 8 >Uint8ClampedArray.from(obj) : Uint8ClampedArray ->Uint8ClampedArray.from : { (arrayLike: ArrayLike, mapfn?: (v: number, k: number) => number, thisArg?: any): Uint8ClampedArray; (arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Uint8ClampedArray; } +>Uint8ClampedArray.from : { (arrayLike: ArrayLike): Uint8ClampedArray; (arrayLike: ArrayLike, mapfn: (v: T, k: number) => number, thisArg?: any): Uint8ClampedArray; (arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Uint8ClampedArray; } >Uint8ClampedArray : Uint8ClampedArrayConstructor ->from : { (arrayLike: ArrayLike, mapfn?: (v: number, k: number) => number, thisArg?: any): Uint8ClampedArray; (arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Uint8ClampedArray; } +>from : { (arrayLike: ArrayLike): Uint8ClampedArray; (arrayLike: ArrayLike, mapfn: (v: T, k: number) => number, thisArg?: any): Uint8ClampedArray; (arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Uint8ClampedArray; } >obj : number[] return typedArrays; @@ -384,9 +384,9 @@ function CreateIntegerTypedArraysFromArrayLike(obj:ArrayLike) { >typedArrays : any[] >0 : 0 >Int8Array.from(obj) : Int8Array ->Int8Array.from : { (arrayLike: ArrayLike, mapfn?: (v: number, k: number) => number, thisArg?: any): Int8Array; (arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Int8Array; } +>Int8Array.from : { (arrayLike: ArrayLike): Int8Array; (arrayLike: ArrayLike, mapfn: (v: T, k: number) => number, thisArg?: any): Int8Array; (arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Int8Array; } >Int8Array : Int8ArrayConstructor ->from : { (arrayLike: ArrayLike, mapfn?: (v: number, k: number) => number, thisArg?: any): Int8Array; (arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Int8Array; } +>from : { (arrayLike: ArrayLike): Int8Array; (arrayLike: ArrayLike, mapfn: (v: T, k: number) => number, thisArg?: any): Int8Array; (arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Int8Array; } >obj : ArrayLike typedArrays[1] = Uint8Array.from(obj); @@ -395,9 +395,9 @@ function CreateIntegerTypedArraysFromArrayLike(obj:ArrayLike) { >typedArrays : any[] >1 : 1 >Uint8Array.from(obj) : Uint8Array ->Uint8Array.from : { (arrayLike: ArrayLike, mapfn?: (v: number, k: number) => number, thisArg?: any): Uint8Array; (arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Uint8Array; } +>Uint8Array.from : { (arrayLike: ArrayLike): Uint8Array; (arrayLike: ArrayLike, mapfn: (v: T, k: number) => number, thisArg?: any): Uint8Array; (arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Uint8Array; } >Uint8Array : Uint8ArrayConstructor ->from : { (arrayLike: ArrayLike, mapfn?: (v: number, k: number) => number, thisArg?: any): Uint8Array; (arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Uint8Array; } +>from : { (arrayLike: ArrayLike): Uint8Array; (arrayLike: ArrayLike, mapfn: (v: T, k: number) => number, thisArg?: any): Uint8Array; (arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Uint8Array; } >obj : ArrayLike typedArrays[2] = Int16Array.from(obj); @@ -406,9 +406,9 @@ function CreateIntegerTypedArraysFromArrayLike(obj:ArrayLike) { >typedArrays : any[] >2 : 2 >Int16Array.from(obj) : Int16Array ->Int16Array.from : { (arrayLike: ArrayLike, mapfn?: (v: number, k: number) => number, thisArg?: any): Int16Array; (arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Int16Array; } +>Int16Array.from : { (arrayLike: ArrayLike): Int16Array; (arrayLike: ArrayLike, mapfn: (v: T, k: number) => number, thisArg?: any): Int16Array; (arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Int16Array; } >Int16Array : Int16ArrayConstructor ->from : { (arrayLike: ArrayLike, mapfn?: (v: number, k: number) => number, thisArg?: any): Int16Array; (arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Int16Array; } +>from : { (arrayLike: ArrayLike): Int16Array; (arrayLike: ArrayLike, mapfn: (v: T, k: number) => number, thisArg?: any): Int16Array; (arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Int16Array; } >obj : ArrayLike typedArrays[3] = Uint16Array.from(obj); @@ -417,9 +417,9 @@ function CreateIntegerTypedArraysFromArrayLike(obj:ArrayLike) { >typedArrays : any[] >3 : 3 >Uint16Array.from(obj) : Uint16Array ->Uint16Array.from : { (arrayLike: ArrayLike, mapfn?: (v: number, k: number) => number, thisArg?: any): Uint16Array; (arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Uint16Array; } +>Uint16Array.from : { (arrayLike: ArrayLike): Uint16Array; (arrayLike: ArrayLike, mapfn: (v: T, k: number) => number, thisArg?: any): Uint16Array; (arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Uint16Array; } >Uint16Array : Uint16ArrayConstructor ->from : { (arrayLike: ArrayLike, mapfn?: (v: number, k: number) => number, thisArg?: any): Uint16Array; (arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Uint16Array; } +>from : { (arrayLike: ArrayLike): Uint16Array; (arrayLike: ArrayLike, mapfn: (v: T, k: number) => number, thisArg?: any): Uint16Array; (arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Uint16Array; } >obj : ArrayLike typedArrays[4] = Int32Array.from(obj); @@ -428,9 +428,9 @@ function CreateIntegerTypedArraysFromArrayLike(obj:ArrayLike) { >typedArrays : any[] >4 : 4 >Int32Array.from(obj) : Int32Array ->Int32Array.from : { (arrayLike: ArrayLike, mapfn?: (v: number, k: number) => number, thisArg?: any): Int32Array; (arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Int32Array; } +>Int32Array.from : { (arrayLike: ArrayLike): Int32Array; (arrayLike: ArrayLike, mapfn: (v: T, k: number) => number, thisArg?: any): Int32Array; (arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Int32Array; } >Int32Array : Int32ArrayConstructor ->from : { (arrayLike: ArrayLike, mapfn?: (v: number, k: number) => number, thisArg?: any): Int32Array; (arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Int32Array; } +>from : { (arrayLike: ArrayLike): Int32Array; (arrayLike: ArrayLike, mapfn: (v: T, k: number) => number, thisArg?: any): Int32Array; (arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Int32Array; } >obj : ArrayLike typedArrays[5] = Uint32Array.from(obj); @@ -439,9 +439,9 @@ function CreateIntegerTypedArraysFromArrayLike(obj:ArrayLike) { >typedArrays : any[] >5 : 5 >Uint32Array.from(obj) : Uint32Array ->Uint32Array.from : { (arrayLike: ArrayLike, mapfn?: (v: number, k: number) => number, thisArg?: any): Uint32Array; (arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Uint32Array; } +>Uint32Array.from : { (arrayLike: ArrayLike): Uint32Array; (arrayLike: ArrayLike, mapfn: (v: T, k: number) => number, thisArg?: any): Uint32Array; (arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Uint32Array; } >Uint32Array : Uint32ArrayConstructor ->from : { (arrayLike: ArrayLike, mapfn?: (v: number, k: number) => number, thisArg?: any): Uint32Array; (arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Uint32Array; } +>from : { (arrayLike: ArrayLike): Uint32Array; (arrayLike: ArrayLike, mapfn: (v: T, k: number) => number, thisArg?: any): Uint32Array; (arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Uint32Array; } >obj : ArrayLike typedArrays[6] = Float32Array.from(obj); @@ -450,9 +450,9 @@ function CreateIntegerTypedArraysFromArrayLike(obj:ArrayLike) { >typedArrays : any[] >6 : 6 >Float32Array.from(obj) : Float32Array ->Float32Array.from : { (arrayLike: ArrayLike, mapfn?: (v: number, k: number) => number, thisArg?: any): Float32Array; (arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Float32Array; } +>Float32Array.from : { (arrayLike: ArrayLike): Float32Array; (arrayLike: ArrayLike, mapfn: (v: T, k: number) => number, thisArg?: any): Float32Array; (arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Float32Array; } >Float32Array : Float32ArrayConstructor ->from : { (arrayLike: ArrayLike, mapfn?: (v: number, k: number) => number, thisArg?: any): Float32Array; (arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Float32Array; } +>from : { (arrayLike: ArrayLike): Float32Array; (arrayLike: ArrayLike, mapfn: (v: T, k: number) => number, thisArg?: any): Float32Array; (arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Float32Array; } >obj : ArrayLike typedArrays[7] = Float64Array.from(obj); @@ -461,9 +461,9 @@ function CreateIntegerTypedArraysFromArrayLike(obj:ArrayLike) { >typedArrays : any[] >7 : 7 >Float64Array.from(obj) : Float64Array ->Float64Array.from : { (arrayLike: ArrayLike, mapfn?: (v: number, k: number) => number, thisArg?: any): Float64Array; (arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Float64Array; } +>Float64Array.from : { (arrayLike: ArrayLike): Float64Array; (arrayLike: ArrayLike, mapfn: (v: T, k: number) => number, thisArg?: any): Float64Array; (arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Float64Array; } >Float64Array : Float64ArrayConstructor ->from : { (arrayLike: ArrayLike, mapfn?: (v: number, k: number) => number, thisArg?: any): Float64Array; (arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Float64Array; } +>from : { (arrayLike: ArrayLike): Float64Array; (arrayLike: ArrayLike, mapfn: (v: T, k: number) => number, thisArg?: any): Float64Array; (arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Float64Array; } >obj : ArrayLike typedArrays[8] = Uint8ClampedArray.from(obj); @@ -472,9 +472,9 @@ function CreateIntegerTypedArraysFromArrayLike(obj:ArrayLike) { >typedArrays : any[] >8 : 8 >Uint8ClampedArray.from(obj) : Uint8ClampedArray ->Uint8ClampedArray.from : { (arrayLike: ArrayLike, mapfn?: (v: number, k: number) => number, thisArg?: any): Uint8ClampedArray; (arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Uint8ClampedArray; } +>Uint8ClampedArray.from : { (arrayLike: ArrayLike): Uint8ClampedArray; (arrayLike: ArrayLike, mapfn: (v: T, k: number) => number, thisArg?: any): Uint8ClampedArray; (arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Uint8ClampedArray; } >Uint8ClampedArray : Uint8ClampedArrayConstructor ->from : { (arrayLike: ArrayLike, mapfn?: (v: number, k: number) => number, thisArg?: any): Uint8ClampedArray; (arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Uint8ClampedArray; } +>from : { (arrayLike: ArrayLike): Uint8ClampedArray; (arrayLike: ArrayLike, mapfn: (v: T, k: number) => number, thisArg?: any): Uint8ClampedArray; (arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Uint8ClampedArray; } >obj : ArrayLike return typedArrays; @@ -738,6 +738,129 @@ function CreateTypedArraysOf2() { >typedArrays : any[] } +function CreateTypedArraysFromMapFn2(obj:ArrayLike, mapFn: (n:T, v:number)=> number) { +>CreateTypedArraysFromMapFn2 : (obj: ArrayLike, mapFn: (n: T, v: number) => number) => any[] +>obj : ArrayLike +>mapFn : (n: T, v: number) => number +>n : T +>v : number + + var typedArrays = []; +>typedArrays : any[] +>[] : undefined[] + + typedArrays[0] = Int8Array.from(obj, mapFn); +>typedArrays[0] = Int8Array.from(obj, mapFn) : Int8Array +>typedArrays[0] : any +>typedArrays : any[] +>0 : 0 +>Int8Array.from(obj, mapFn) : Int8Array +>Int8Array.from : { (arrayLike: ArrayLike): Int8Array; (arrayLike: ArrayLike, mapfn: (v: T, k: number) => number, thisArg?: any): Int8Array; (arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Int8Array; } +>Int8Array : Int8ArrayConstructor +>from : { (arrayLike: ArrayLike): Int8Array; (arrayLike: ArrayLike, mapfn: (v: T, k: number) => number, thisArg?: any): Int8Array; (arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Int8Array; } +>obj : ArrayLike +>mapFn : (n: T, v: number) => number + + typedArrays[1] = Uint8Array.from(obj, mapFn); +>typedArrays[1] = Uint8Array.from(obj, mapFn) : Uint8Array +>typedArrays[1] : any +>typedArrays : any[] +>1 : 1 +>Uint8Array.from(obj, mapFn) : Uint8Array +>Uint8Array.from : { (arrayLike: ArrayLike): Uint8Array; (arrayLike: ArrayLike, mapfn: (v: T, k: number) => number, thisArg?: any): Uint8Array; (arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Uint8Array; } +>Uint8Array : Uint8ArrayConstructor +>from : { (arrayLike: ArrayLike): Uint8Array; (arrayLike: ArrayLike, mapfn: (v: T, k: number) => number, thisArg?: any): Uint8Array; (arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Uint8Array; } +>obj : ArrayLike +>mapFn : (n: T, v: number) => number + + typedArrays[2] = Int16Array.from(obj, mapFn); +>typedArrays[2] = Int16Array.from(obj, mapFn) : Int16Array +>typedArrays[2] : any +>typedArrays : any[] +>2 : 2 +>Int16Array.from(obj, mapFn) : Int16Array +>Int16Array.from : { (arrayLike: ArrayLike): Int16Array; (arrayLike: ArrayLike, mapfn: (v: T, k: number) => number, thisArg?: any): Int16Array; (arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Int16Array; } +>Int16Array : Int16ArrayConstructor +>from : { (arrayLike: ArrayLike): Int16Array; (arrayLike: ArrayLike, mapfn: (v: T, k: number) => number, thisArg?: any): Int16Array; (arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Int16Array; } +>obj : ArrayLike +>mapFn : (n: T, v: number) => number + + typedArrays[3] = Uint16Array.from(obj, mapFn); +>typedArrays[3] = Uint16Array.from(obj, mapFn) : Uint16Array +>typedArrays[3] : any +>typedArrays : any[] +>3 : 3 +>Uint16Array.from(obj, mapFn) : Uint16Array +>Uint16Array.from : { (arrayLike: ArrayLike): Uint16Array; (arrayLike: ArrayLike, mapfn: (v: T, k: number) => number, thisArg?: any): Uint16Array; (arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Uint16Array; } +>Uint16Array : Uint16ArrayConstructor +>from : { (arrayLike: ArrayLike): Uint16Array; (arrayLike: ArrayLike, mapfn: (v: T, k: number) => number, thisArg?: any): Uint16Array; (arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Uint16Array; } +>obj : ArrayLike +>mapFn : (n: T, v: number) => number + + typedArrays[4] = Int32Array.from(obj, mapFn); +>typedArrays[4] = Int32Array.from(obj, mapFn) : Int32Array +>typedArrays[4] : any +>typedArrays : any[] +>4 : 4 +>Int32Array.from(obj, mapFn) : Int32Array +>Int32Array.from : { (arrayLike: ArrayLike): Int32Array; (arrayLike: ArrayLike, mapfn: (v: T, k: number) => number, thisArg?: any): Int32Array; (arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Int32Array; } +>Int32Array : Int32ArrayConstructor +>from : { (arrayLike: ArrayLike): Int32Array; (arrayLike: ArrayLike, mapfn: (v: T, k: number) => number, thisArg?: any): Int32Array; (arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Int32Array; } +>obj : ArrayLike +>mapFn : (n: T, v: number) => number + + typedArrays[5] = Uint32Array.from(obj, mapFn); +>typedArrays[5] = Uint32Array.from(obj, mapFn) : Uint32Array +>typedArrays[5] : any +>typedArrays : any[] +>5 : 5 +>Uint32Array.from(obj, mapFn) : Uint32Array +>Uint32Array.from : { (arrayLike: ArrayLike): Uint32Array; (arrayLike: ArrayLike, mapfn: (v: T, k: number) => number, thisArg?: any): Uint32Array; (arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Uint32Array; } +>Uint32Array : Uint32ArrayConstructor +>from : { (arrayLike: ArrayLike): Uint32Array; (arrayLike: ArrayLike, mapfn: (v: T, k: number) => number, thisArg?: any): Uint32Array; (arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Uint32Array; } +>obj : ArrayLike +>mapFn : (n: T, v: number) => number + + typedArrays[6] = Float32Array.from(obj, mapFn); +>typedArrays[6] = Float32Array.from(obj, mapFn) : Float32Array +>typedArrays[6] : any +>typedArrays : any[] +>6 : 6 +>Float32Array.from(obj, mapFn) : Float32Array +>Float32Array.from : { (arrayLike: ArrayLike): Float32Array; (arrayLike: ArrayLike, mapfn: (v: T, k: number) => number, thisArg?: any): Float32Array; (arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Float32Array; } +>Float32Array : Float32ArrayConstructor +>from : { (arrayLike: ArrayLike): Float32Array; (arrayLike: ArrayLike, mapfn: (v: T, k: number) => number, thisArg?: any): Float32Array; (arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Float32Array; } +>obj : ArrayLike +>mapFn : (n: T, v: number) => number + + typedArrays[7] = Float64Array.from(obj, mapFn); +>typedArrays[7] = Float64Array.from(obj, mapFn) : Float64Array +>typedArrays[7] : any +>typedArrays : any[] +>7 : 7 +>Float64Array.from(obj, mapFn) : Float64Array +>Float64Array.from : { (arrayLike: ArrayLike): Float64Array; (arrayLike: ArrayLike, mapfn: (v: T, k: number) => number, thisArg?: any): Float64Array; (arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Float64Array; } +>Float64Array : Float64ArrayConstructor +>from : { (arrayLike: ArrayLike): Float64Array; (arrayLike: ArrayLike, mapfn: (v: T, k: number) => number, thisArg?: any): Float64Array; (arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Float64Array; } +>obj : ArrayLike +>mapFn : (n: T, v: number) => number + + typedArrays[8] = Uint8ClampedArray.from(obj, mapFn); +>typedArrays[8] = Uint8ClampedArray.from(obj, mapFn) : Uint8ClampedArray +>typedArrays[8] : any +>typedArrays : any[] +>8 : 8 +>Uint8ClampedArray.from(obj, mapFn) : Uint8ClampedArray +>Uint8ClampedArray.from : { (arrayLike: ArrayLike): Uint8ClampedArray; (arrayLike: ArrayLike, mapfn: (v: T, k: number) => number, thisArg?: any): Uint8ClampedArray; (arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Uint8ClampedArray; } +>Uint8ClampedArray : Uint8ClampedArrayConstructor +>from : { (arrayLike: ArrayLike): Uint8ClampedArray; (arrayLike: ArrayLike, mapfn: (v: T, k: number) => number, thisArg?: any): Uint8ClampedArray; (arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Uint8ClampedArray; } +>obj : ArrayLike +>mapFn : (n: T, v: number) => number + + return typedArrays; +>typedArrays : any[] +} + function CreateTypedArraysFromMapFn(obj:ArrayLike, mapFn: (n:number, v:number)=> number) { >CreateTypedArraysFromMapFn : (obj: ArrayLike, mapFn: (n: number, v: number) => number) => any[] >obj : ArrayLike @@ -755,9 +878,9 @@ function CreateTypedArraysFromMapFn(obj:ArrayLike, mapFn: (n:number, v:n >typedArrays : any[] >0 : 0 >Int8Array.from(obj, mapFn) : Int8Array ->Int8Array.from : { (arrayLike: ArrayLike, mapfn?: (v: number, k: number) => number, thisArg?: any): Int8Array; (arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Int8Array; } +>Int8Array.from : { (arrayLike: ArrayLike): Int8Array; (arrayLike: ArrayLike, mapfn: (v: T, k: number) => number, thisArg?: any): Int8Array; (arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Int8Array; } >Int8Array : Int8ArrayConstructor ->from : { (arrayLike: ArrayLike, mapfn?: (v: number, k: number) => number, thisArg?: any): Int8Array; (arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Int8Array; } +>from : { (arrayLike: ArrayLike): Int8Array; (arrayLike: ArrayLike, mapfn: (v: T, k: number) => number, thisArg?: any): Int8Array; (arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Int8Array; } >obj : ArrayLike >mapFn : (n: number, v: number) => number @@ -767,9 +890,9 @@ function CreateTypedArraysFromMapFn(obj:ArrayLike, mapFn: (n:number, v:n >typedArrays : any[] >1 : 1 >Uint8Array.from(obj, mapFn) : Uint8Array ->Uint8Array.from : { (arrayLike: ArrayLike, mapfn?: (v: number, k: number) => number, thisArg?: any): Uint8Array; (arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Uint8Array; } +>Uint8Array.from : { (arrayLike: ArrayLike): Uint8Array; (arrayLike: ArrayLike, mapfn: (v: T, k: number) => number, thisArg?: any): Uint8Array; (arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Uint8Array; } >Uint8Array : Uint8ArrayConstructor ->from : { (arrayLike: ArrayLike, mapfn?: (v: number, k: number) => number, thisArg?: any): Uint8Array; (arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Uint8Array; } +>from : { (arrayLike: ArrayLike): Uint8Array; (arrayLike: ArrayLike, mapfn: (v: T, k: number) => number, thisArg?: any): Uint8Array; (arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Uint8Array; } >obj : ArrayLike >mapFn : (n: number, v: number) => number @@ -779,9 +902,9 @@ function CreateTypedArraysFromMapFn(obj:ArrayLike, mapFn: (n:number, v:n >typedArrays : any[] >2 : 2 >Int16Array.from(obj, mapFn) : Int16Array ->Int16Array.from : { (arrayLike: ArrayLike, mapfn?: (v: number, k: number) => number, thisArg?: any): Int16Array; (arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Int16Array; } +>Int16Array.from : { (arrayLike: ArrayLike): Int16Array; (arrayLike: ArrayLike, mapfn: (v: T, k: number) => number, thisArg?: any): Int16Array; (arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Int16Array; } >Int16Array : Int16ArrayConstructor ->from : { (arrayLike: ArrayLike, mapfn?: (v: number, k: number) => number, thisArg?: any): Int16Array; (arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Int16Array; } +>from : { (arrayLike: ArrayLike): Int16Array; (arrayLike: ArrayLike, mapfn: (v: T, k: number) => number, thisArg?: any): Int16Array; (arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Int16Array; } >obj : ArrayLike >mapFn : (n: number, v: number) => number @@ -791,9 +914,9 @@ function CreateTypedArraysFromMapFn(obj:ArrayLike, mapFn: (n:number, v:n >typedArrays : any[] >3 : 3 >Uint16Array.from(obj, mapFn) : Uint16Array ->Uint16Array.from : { (arrayLike: ArrayLike, mapfn?: (v: number, k: number) => number, thisArg?: any): Uint16Array; (arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Uint16Array; } +>Uint16Array.from : { (arrayLike: ArrayLike): Uint16Array; (arrayLike: ArrayLike, mapfn: (v: T, k: number) => number, thisArg?: any): Uint16Array; (arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Uint16Array; } >Uint16Array : Uint16ArrayConstructor ->from : { (arrayLike: ArrayLike, mapfn?: (v: number, k: number) => number, thisArg?: any): Uint16Array; (arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Uint16Array; } +>from : { (arrayLike: ArrayLike): Uint16Array; (arrayLike: ArrayLike, mapfn: (v: T, k: number) => number, thisArg?: any): Uint16Array; (arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Uint16Array; } >obj : ArrayLike >mapFn : (n: number, v: number) => number @@ -803,9 +926,9 @@ function CreateTypedArraysFromMapFn(obj:ArrayLike, mapFn: (n:number, v:n >typedArrays : any[] >4 : 4 >Int32Array.from(obj, mapFn) : Int32Array ->Int32Array.from : { (arrayLike: ArrayLike, mapfn?: (v: number, k: number) => number, thisArg?: any): Int32Array; (arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Int32Array; } +>Int32Array.from : { (arrayLike: ArrayLike): Int32Array; (arrayLike: ArrayLike, mapfn: (v: T, k: number) => number, thisArg?: any): Int32Array; (arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Int32Array; } >Int32Array : Int32ArrayConstructor ->from : { (arrayLike: ArrayLike, mapfn?: (v: number, k: number) => number, thisArg?: any): Int32Array; (arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Int32Array; } +>from : { (arrayLike: ArrayLike): Int32Array; (arrayLike: ArrayLike, mapfn: (v: T, k: number) => number, thisArg?: any): Int32Array; (arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Int32Array; } >obj : ArrayLike >mapFn : (n: number, v: number) => number @@ -815,9 +938,9 @@ function CreateTypedArraysFromMapFn(obj:ArrayLike, mapFn: (n:number, v:n >typedArrays : any[] >5 : 5 >Uint32Array.from(obj, mapFn) : Uint32Array ->Uint32Array.from : { (arrayLike: ArrayLike, mapfn?: (v: number, k: number) => number, thisArg?: any): Uint32Array; (arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Uint32Array; } +>Uint32Array.from : { (arrayLike: ArrayLike): Uint32Array; (arrayLike: ArrayLike, mapfn: (v: T, k: number) => number, thisArg?: any): Uint32Array; (arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Uint32Array; } >Uint32Array : Uint32ArrayConstructor ->from : { (arrayLike: ArrayLike, mapfn?: (v: number, k: number) => number, thisArg?: any): Uint32Array; (arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Uint32Array; } +>from : { (arrayLike: ArrayLike): Uint32Array; (arrayLike: ArrayLike, mapfn: (v: T, k: number) => number, thisArg?: any): Uint32Array; (arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Uint32Array; } >obj : ArrayLike >mapFn : (n: number, v: number) => number @@ -827,9 +950,9 @@ function CreateTypedArraysFromMapFn(obj:ArrayLike, mapFn: (n:number, v:n >typedArrays : any[] >6 : 6 >Float32Array.from(obj, mapFn) : Float32Array ->Float32Array.from : { (arrayLike: ArrayLike, mapfn?: (v: number, k: number) => number, thisArg?: any): Float32Array; (arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Float32Array; } +>Float32Array.from : { (arrayLike: ArrayLike): Float32Array; (arrayLike: ArrayLike, mapfn: (v: T, k: number) => number, thisArg?: any): Float32Array; (arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Float32Array; } >Float32Array : Float32ArrayConstructor ->from : { (arrayLike: ArrayLike, mapfn?: (v: number, k: number) => number, thisArg?: any): Float32Array; (arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Float32Array; } +>from : { (arrayLike: ArrayLike): Float32Array; (arrayLike: ArrayLike, mapfn: (v: T, k: number) => number, thisArg?: any): Float32Array; (arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Float32Array; } >obj : ArrayLike >mapFn : (n: number, v: number) => number @@ -839,9 +962,9 @@ function CreateTypedArraysFromMapFn(obj:ArrayLike, mapFn: (n:number, v:n >typedArrays : any[] >7 : 7 >Float64Array.from(obj, mapFn) : Float64Array ->Float64Array.from : { (arrayLike: ArrayLike, mapfn?: (v: number, k: number) => number, thisArg?: any): Float64Array; (arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Float64Array; } +>Float64Array.from : { (arrayLike: ArrayLike): Float64Array; (arrayLike: ArrayLike, mapfn: (v: T, k: number) => number, thisArg?: any): Float64Array; (arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Float64Array; } >Float64Array : Float64ArrayConstructor ->from : { (arrayLike: ArrayLike, mapfn?: (v: number, k: number) => number, thisArg?: any): Float64Array; (arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Float64Array; } +>from : { (arrayLike: ArrayLike): Float64Array; (arrayLike: ArrayLike, mapfn: (v: T, k: number) => number, thisArg?: any): Float64Array; (arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Float64Array; } >obj : ArrayLike >mapFn : (n: number, v: number) => number @@ -851,9 +974,9 @@ function CreateTypedArraysFromMapFn(obj:ArrayLike, mapFn: (n:number, v:n >typedArrays : any[] >8 : 8 >Uint8ClampedArray.from(obj, mapFn) : Uint8ClampedArray ->Uint8ClampedArray.from : { (arrayLike: ArrayLike, mapfn?: (v: number, k: number) => number, thisArg?: any): Uint8ClampedArray; (arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Uint8ClampedArray; } +>Uint8ClampedArray.from : { (arrayLike: ArrayLike): Uint8ClampedArray; (arrayLike: ArrayLike, mapfn: (v: T, k: number) => number, thisArg?: any): Uint8ClampedArray; (arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Uint8ClampedArray; } >Uint8ClampedArray : Uint8ClampedArrayConstructor ->from : { (arrayLike: ArrayLike, mapfn?: (v: number, k: number) => number, thisArg?: any): Uint8ClampedArray; (arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Uint8ClampedArray; } +>from : { (arrayLike: ArrayLike): Uint8ClampedArray; (arrayLike: ArrayLike, mapfn: (v: T, k: number) => number, thisArg?: any): Uint8ClampedArray; (arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Uint8ClampedArray; } >obj : ArrayLike >mapFn : (n: number, v: number) => number @@ -879,9 +1002,9 @@ function CreateTypedArraysFromThisObj(obj:ArrayLike, mapFn: (n:number, v >typedArrays : any[] >0 : 0 >Int8Array.from(obj, mapFn, thisArg) : Int8Array ->Int8Array.from : { (arrayLike: ArrayLike, mapfn?: (v: number, k: number) => number, thisArg?: any): Int8Array; (arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Int8Array; } +>Int8Array.from : { (arrayLike: ArrayLike): Int8Array; (arrayLike: ArrayLike, mapfn: (v: T, k: number) => number, thisArg?: any): Int8Array; (arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Int8Array; } >Int8Array : Int8ArrayConstructor ->from : { (arrayLike: ArrayLike, mapfn?: (v: number, k: number) => number, thisArg?: any): Int8Array; (arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Int8Array; } +>from : { (arrayLike: ArrayLike): Int8Array; (arrayLike: ArrayLike, mapfn: (v: T, k: number) => number, thisArg?: any): Int8Array; (arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Int8Array; } >obj : ArrayLike >mapFn : (n: number, v: number) => number >thisArg : {} @@ -892,9 +1015,9 @@ function CreateTypedArraysFromThisObj(obj:ArrayLike, mapFn: (n:number, v >typedArrays : any[] >1 : 1 >Uint8Array.from(obj, mapFn, thisArg) : Uint8Array ->Uint8Array.from : { (arrayLike: ArrayLike, mapfn?: (v: number, k: number) => number, thisArg?: any): Uint8Array; (arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Uint8Array; } +>Uint8Array.from : { (arrayLike: ArrayLike): Uint8Array; (arrayLike: ArrayLike, mapfn: (v: T, k: number) => number, thisArg?: any): Uint8Array; (arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Uint8Array; } >Uint8Array : Uint8ArrayConstructor ->from : { (arrayLike: ArrayLike, mapfn?: (v: number, k: number) => number, thisArg?: any): Uint8Array; (arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Uint8Array; } +>from : { (arrayLike: ArrayLike): Uint8Array; (arrayLike: ArrayLike, mapfn: (v: T, k: number) => number, thisArg?: any): Uint8Array; (arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Uint8Array; } >obj : ArrayLike >mapFn : (n: number, v: number) => number >thisArg : {} @@ -905,9 +1028,9 @@ function CreateTypedArraysFromThisObj(obj:ArrayLike, mapFn: (n:number, v >typedArrays : any[] >2 : 2 >Int16Array.from(obj, mapFn, thisArg) : Int16Array ->Int16Array.from : { (arrayLike: ArrayLike, mapfn?: (v: number, k: number) => number, thisArg?: any): Int16Array; (arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Int16Array; } +>Int16Array.from : { (arrayLike: ArrayLike): Int16Array; (arrayLike: ArrayLike, mapfn: (v: T, k: number) => number, thisArg?: any): Int16Array; (arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Int16Array; } >Int16Array : Int16ArrayConstructor ->from : { (arrayLike: ArrayLike, mapfn?: (v: number, k: number) => number, thisArg?: any): Int16Array; (arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Int16Array; } +>from : { (arrayLike: ArrayLike): Int16Array; (arrayLike: ArrayLike, mapfn: (v: T, k: number) => number, thisArg?: any): Int16Array; (arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Int16Array; } >obj : ArrayLike >mapFn : (n: number, v: number) => number >thisArg : {} @@ -918,9 +1041,9 @@ function CreateTypedArraysFromThisObj(obj:ArrayLike, mapFn: (n:number, v >typedArrays : any[] >3 : 3 >Uint16Array.from(obj, mapFn, thisArg) : Uint16Array ->Uint16Array.from : { (arrayLike: ArrayLike, mapfn?: (v: number, k: number) => number, thisArg?: any): Uint16Array; (arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Uint16Array; } +>Uint16Array.from : { (arrayLike: ArrayLike): Uint16Array; (arrayLike: ArrayLike, mapfn: (v: T, k: number) => number, thisArg?: any): Uint16Array; (arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Uint16Array; } >Uint16Array : Uint16ArrayConstructor ->from : { (arrayLike: ArrayLike, mapfn?: (v: number, k: number) => number, thisArg?: any): Uint16Array; (arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Uint16Array; } +>from : { (arrayLike: ArrayLike): Uint16Array; (arrayLike: ArrayLike, mapfn: (v: T, k: number) => number, thisArg?: any): Uint16Array; (arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Uint16Array; } >obj : ArrayLike >mapFn : (n: number, v: number) => number >thisArg : {} @@ -931,9 +1054,9 @@ function CreateTypedArraysFromThisObj(obj:ArrayLike, mapFn: (n:number, v >typedArrays : any[] >4 : 4 >Int32Array.from(obj, mapFn, thisArg) : Int32Array ->Int32Array.from : { (arrayLike: ArrayLike, mapfn?: (v: number, k: number) => number, thisArg?: any): Int32Array; (arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Int32Array; } +>Int32Array.from : { (arrayLike: ArrayLike): Int32Array; (arrayLike: ArrayLike, mapfn: (v: T, k: number) => number, thisArg?: any): Int32Array; (arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Int32Array; } >Int32Array : Int32ArrayConstructor ->from : { (arrayLike: ArrayLike, mapfn?: (v: number, k: number) => number, thisArg?: any): Int32Array; (arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Int32Array; } +>from : { (arrayLike: ArrayLike): Int32Array; (arrayLike: ArrayLike, mapfn: (v: T, k: number) => number, thisArg?: any): Int32Array; (arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Int32Array; } >obj : ArrayLike >mapFn : (n: number, v: number) => number >thisArg : {} @@ -944,9 +1067,9 @@ function CreateTypedArraysFromThisObj(obj:ArrayLike, mapFn: (n:number, v >typedArrays : any[] >5 : 5 >Uint32Array.from(obj, mapFn, thisArg) : Uint32Array ->Uint32Array.from : { (arrayLike: ArrayLike, mapfn?: (v: number, k: number) => number, thisArg?: any): Uint32Array; (arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Uint32Array; } +>Uint32Array.from : { (arrayLike: ArrayLike): Uint32Array; (arrayLike: ArrayLike, mapfn: (v: T, k: number) => number, thisArg?: any): Uint32Array; (arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Uint32Array; } >Uint32Array : Uint32ArrayConstructor ->from : { (arrayLike: ArrayLike, mapfn?: (v: number, k: number) => number, thisArg?: any): Uint32Array; (arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Uint32Array; } +>from : { (arrayLike: ArrayLike): Uint32Array; (arrayLike: ArrayLike, mapfn: (v: T, k: number) => number, thisArg?: any): Uint32Array; (arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Uint32Array; } >obj : ArrayLike >mapFn : (n: number, v: number) => number >thisArg : {} @@ -957,9 +1080,9 @@ function CreateTypedArraysFromThisObj(obj:ArrayLike, mapFn: (n:number, v >typedArrays : any[] >6 : 6 >Float32Array.from(obj, mapFn, thisArg) : Float32Array ->Float32Array.from : { (arrayLike: ArrayLike, mapfn?: (v: number, k: number) => number, thisArg?: any): Float32Array; (arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Float32Array; } +>Float32Array.from : { (arrayLike: ArrayLike): Float32Array; (arrayLike: ArrayLike, mapfn: (v: T, k: number) => number, thisArg?: any): Float32Array; (arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Float32Array; } >Float32Array : Float32ArrayConstructor ->from : { (arrayLike: ArrayLike, mapfn?: (v: number, k: number) => number, thisArg?: any): Float32Array; (arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Float32Array; } +>from : { (arrayLike: ArrayLike): Float32Array; (arrayLike: ArrayLike, mapfn: (v: T, k: number) => number, thisArg?: any): Float32Array; (arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Float32Array; } >obj : ArrayLike >mapFn : (n: number, v: number) => number >thisArg : {} @@ -970,9 +1093,9 @@ function CreateTypedArraysFromThisObj(obj:ArrayLike, mapFn: (n:number, v >typedArrays : any[] >7 : 7 >Float64Array.from(obj, mapFn, thisArg) : Float64Array ->Float64Array.from : { (arrayLike: ArrayLike, mapfn?: (v: number, k: number) => number, thisArg?: any): Float64Array; (arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Float64Array; } +>Float64Array.from : { (arrayLike: ArrayLike): Float64Array; (arrayLike: ArrayLike, mapfn: (v: T, k: number) => number, thisArg?: any): Float64Array; (arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Float64Array; } >Float64Array : Float64ArrayConstructor ->from : { (arrayLike: ArrayLike, mapfn?: (v: number, k: number) => number, thisArg?: any): Float64Array; (arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Float64Array; } +>from : { (arrayLike: ArrayLike): Float64Array; (arrayLike: ArrayLike, mapfn: (v: T, k: number) => number, thisArg?: any): Float64Array; (arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Float64Array; } >obj : ArrayLike >mapFn : (n: number, v: number) => number >thisArg : {} @@ -983,9 +1106,9 @@ function CreateTypedArraysFromThisObj(obj:ArrayLike, mapFn: (n:number, v >typedArrays : any[] >8 : 8 >Uint8ClampedArray.from(obj, mapFn, thisArg) : Uint8ClampedArray ->Uint8ClampedArray.from : { (arrayLike: ArrayLike, mapfn?: (v: number, k: number) => number, thisArg?: any): Uint8ClampedArray; (arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Uint8ClampedArray; } +>Uint8ClampedArray.from : { (arrayLike: ArrayLike): Uint8ClampedArray; (arrayLike: ArrayLike, mapfn: (v: T, k: number) => number, thisArg?: any): Uint8ClampedArray; (arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Uint8ClampedArray; } >Uint8ClampedArray : Uint8ClampedArrayConstructor ->from : { (arrayLike: ArrayLike, mapfn?: (v: number, k: number) => number, thisArg?: any): Uint8ClampedArray; (arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Uint8ClampedArray; } +>from : { (arrayLike: ArrayLike): Uint8ClampedArray; (arrayLike: ArrayLike, mapfn: (v: T, k: number) => number, thisArg?: any): Uint8ClampedArray; (arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Uint8ClampedArray; } >obj : ArrayLike >mapFn : (n: number, v: number) => number >thisArg : {} @@ -993,3 +1116,136 @@ function CreateTypedArraysFromThisObj(obj:ArrayLike, mapFn: (n:number, v return typedArrays; >typedArrays : any[] } + +function CreateTypedArraysFromThisObj2(obj:ArrayLike, mapFn: (n:T, v:number)=> number, thisArg: {}) { +>CreateTypedArraysFromThisObj2 : (obj: ArrayLike, mapFn: (n: T, v: number) => number, thisArg: {}) => any[] +>obj : ArrayLike +>mapFn : (n: T, v: number) => number +>n : T +>v : number +>thisArg : {} + + var typedArrays = []; +>typedArrays : any[] +>[] : undefined[] + + typedArrays[0] = Int8Array.from(obj, mapFn, thisArg); +>typedArrays[0] = Int8Array.from(obj, mapFn, thisArg) : Int8Array +>typedArrays[0] : any +>typedArrays : any[] +>0 : 0 +>Int8Array.from(obj, mapFn, thisArg) : Int8Array +>Int8Array.from : { (arrayLike: ArrayLike): Int8Array; (arrayLike: ArrayLike, mapfn: (v: T, k: number) => number, thisArg?: any): Int8Array; (arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Int8Array; } +>Int8Array : Int8ArrayConstructor +>from : { (arrayLike: ArrayLike): Int8Array; (arrayLike: ArrayLike, mapfn: (v: T, k: number) => number, thisArg?: any): Int8Array; (arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Int8Array; } +>obj : ArrayLike +>mapFn : (n: T, v: number) => number +>thisArg : {} + + typedArrays[1] = Uint8Array.from(obj, mapFn, thisArg); +>typedArrays[1] = Uint8Array.from(obj, mapFn, thisArg) : Uint8Array +>typedArrays[1] : any +>typedArrays : any[] +>1 : 1 +>Uint8Array.from(obj, mapFn, thisArg) : Uint8Array +>Uint8Array.from : { (arrayLike: ArrayLike): Uint8Array; (arrayLike: ArrayLike, mapfn: (v: T, k: number) => number, thisArg?: any): Uint8Array; (arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Uint8Array; } +>Uint8Array : Uint8ArrayConstructor +>from : { (arrayLike: ArrayLike): Uint8Array; (arrayLike: ArrayLike, mapfn: (v: T, k: number) => number, thisArg?: any): Uint8Array; (arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Uint8Array; } +>obj : ArrayLike +>mapFn : (n: T, v: number) => number +>thisArg : {} + + typedArrays[2] = Int16Array.from(obj, mapFn, thisArg); +>typedArrays[2] = Int16Array.from(obj, mapFn, thisArg) : Int16Array +>typedArrays[2] : any +>typedArrays : any[] +>2 : 2 +>Int16Array.from(obj, mapFn, thisArg) : Int16Array +>Int16Array.from : { (arrayLike: ArrayLike): Int16Array; (arrayLike: ArrayLike, mapfn: (v: T, k: number) => number, thisArg?: any): Int16Array; (arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Int16Array; } +>Int16Array : Int16ArrayConstructor +>from : { (arrayLike: ArrayLike): Int16Array; (arrayLike: ArrayLike, mapfn: (v: T, k: number) => number, thisArg?: any): Int16Array; (arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Int16Array; } +>obj : ArrayLike +>mapFn : (n: T, v: number) => number +>thisArg : {} + + typedArrays[3] = Uint16Array.from(obj, mapFn, thisArg); +>typedArrays[3] = Uint16Array.from(obj, mapFn, thisArg) : Uint16Array +>typedArrays[3] : any +>typedArrays : any[] +>3 : 3 +>Uint16Array.from(obj, mapFn, thisArg) : Uint16Array +>Uint16Array.from : { (arrayLike: ArrayLike): Uint16Array; (arrayLike: ArrayLike, mapfn: (v: T, k: number) => number, thisArg?: any): Uint16Array; (arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Uint16Array; } +>Uint16Array : Uint16ArrayConstructor +>from : { (arrayLike: ArrayLike): Uint16Array; (arrayLike: ArrayLike, mapfn: (v: T, k: number) => number, thisArg?: any): Uint16Array; (arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Uint16Array; } +>obj : ArrayLike +>mapFn : (n: T, v: number) => number +>thisArg : {} + + typedArrays[4] = Int32Array.from(obj, mapFn, thisArg); +>typedArrays[4] = Int32Array.from(obj, mapFn, thisArg) : Int32Array +>typedArrays[4] : any +>typedArrays : any[] +>4 : 4 +>Int32Array.from(obj, mapFn, thisArg) : Int32Array +>Int32Array.from : { (arrayLike: ArrayLike): Int32Array; (arrayLike: ArrayLike, mapfn: (v: T, k: number) => number, thisArg?: any): Int32Array; (arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Int32Array; } +>Int32Array : Int32ArrayConstructor +>from : { (arrayLike: ArrayLike): Int32Array; (arrayLike: ArrayLike, mapfn: (v: T, k: number) => number, thisArg?: any): Int32Array; (arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Int32Array; } +>obj : ArrayLike +>mapFn : (n: T, v: number) => number +>thisArg : {} + + typedArrays[5] = Uint32Array.from(obj, mapFn, thisArg); +>typedArrays[5] = Uint32Array.from(obj, mapFn, thisArg) : Uint32Array +>typedArrays[5] : any +>typedArrays : any[] +>5 : 5 +>Uint32Array.from(obj, mapFn, thisArg) : Uint32Array +>Uint32Array.from : { (arrayLike: ArrayLike): Uint32Array; (arrayLike: ArrayLike, mapfn: (v: T, k: number) => number, thisArg?: any): Uint32Array; (arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Uint32Array; } +>Uint32Array : Uint32ArrayConstructor +>from : { (arrayLike: ArrayLike): Uint32Array; (arrayLike: ArrayLike, mapfn: (v: T, k: number) => number, thisArg?: any): Uint32Array; (arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Uint32Array; } +>obj : ArrayLike +>mapFn : (n: T, v: number) => number +>thisArg : {} + + typedArrays[6] = Float32Array.from(obj, mapFn, thisArg); +>typedArrays[6] = Float32Array.from(obj, mapFn, thisArg) : Float32Array +>typedArrays[6] : any +>typedArrays : any[] +>6 : 6 +>Float32Array.from(obj, mapFn, thisArg) : Float32Array +>Float32Array.from : { (arrayLike: ArrayLike): Float32Array; (arrayLike: ArrayLike, mapfn: (v: T, k: number) => number, thisArg?: any): Float32Array; (arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Float32Array; } +>Float32Array : Float32ArrayConstructor +>from : { (arrayLike: ArrayLike): Float32Array; (arrayLike: ArrayLike, mapfn: (v: T, k: number) => number, thisArg?: any): Float32Array; (arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Float32Array; } +>obj : ArrayLike +>mapFn : (n: T, v: number) => number +>thisArg : {} + + typedArrays[7] = Float64Array.from(obj, mapFn, thisArg); +>typedArrays[7] = Float64Array.from(obj, mapFn, thisArg) : Float64Array +>typedArrays[7] : any +>typedArrays : any[] +>7 : 7 +>Float64Array.from(obj, mapFn, thisArg) : Float64Array +>Float64Array.from : { (arrayLike: ArrayLike): Float64Array; (arrayLike: ArrayLike, mapfn: (v: T, k: number) => number, thisArg?: any): Float64Array; (arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Float64Array; } +>Float64Array : Float64ArrayConstructor +>from : { (arrayLike: ArrayLike): Float64Array; (arrayLike: ArrayLike, mapfn: (v: T, k: number) => number, thisArg?: any): Float64Array; (arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Float64Array; } +>obj : ArrayLike +>mapFn : (n: T, v: number) => number +>thisArg : {} + + typedArrays[8] = Uint8ClampedArray.from(obj, mapFn, thisArg); +>typedArrays[8] = Uint8ClampedArray.from(obj, mapFn, thisArg) : Uint8ClampedArray +>typedArrays[8] : any +>typedArrays : any[] +>8 : 8 +>Uint8ClampedArray.from(obj, mapFn, thisArg) : Uint8ClampedArray +>Uint8ClampedArray.from : { (arrayLike: ArrayLike): Uint8ClampedArray; (arrayLike: ArrayLike, mapfn: (v: T, k: number) => number, thisArg?: any): Uint8ClampedArray; (arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Uint8ClampedArray; } +>Uint8ClampedArray : Uint8ClampedArrayConstructor +>from : { (arrayLike: ArrayLike): Uint8ClampedArray; (arrayLike: ArrayLike, mapfn: (v: T, k: number) => number, thisArg?: any): Uint8ClampedArray; (arrayLike: Iterable, mapfn?: (v: number, k: number) => number, thisArg?: any): Uint8ClampedArray; } +>obj : ArrayLike +>mapFn : (n: T, v: number) => number +>thisArg : {} + + return typedArrays; +>typedArrays : any[] +} From f666295c8fecda5b91293afb5f30231b14e68b66 Mon Sep 17 00:00:00 2001 From: Ajay Poshak Date: Mon, 1 Oct 2018 22:53:16 +0530 Subject: [PATCH 07/49] Add docs for better support of local testing and faster clones --- CONTRIBUTING.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 81ffe06e8e2..a8e3fa31f29 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -47,6 +47,13 @@ In general, things we find useful when reviewing suggestions are: # Instructions for Contributing Code +## Some things in general + +As Typescript is a big codebase, so some might run into issues while cloning this repo. Hence, it is advisable to use +`git clone --depth=1 ` to clone it faster. + +Run `jake build` after every change. If you want to test it locally in some another project then use `node /built/local/tsc.js` in place of `tsc` in your project. For example, to run `tsc --watch`, use `node /TypeScript/built/local/tsc.js --watch`. + ## Contributing bug fixes TypeScript is currently accepting contributions in the form of bug fixes. A bug must have an issue tracking it in the issue tracker that has been approved ("Milestone == Community") by the TypeScript team. Your pull request should include a link to the bug that you are fixing. If you've submitted a PR for a bug, please post a comment in the bug to avoid duplication of effort. From c22e7cade99bd6d238ddddd9c4b294ee3c8c9384 Mon Sep 17 00:00:00 2001 From: Daniel Rosenwasser Date: Mon, 1 Oct 2018 13:25:43 -0700 Subject: [PATCH 08/49] Update CONTRIBUTING.md --- CONTRIBUTING.md | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index a8e3fa31f29..a25ed0ad4cd 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -47,12 +47,16 @@ In general, things we find useful when reviewing suggestions are: # Instructions for Contributing Code -## Some things in general +## Tips -As Typescript is a big codebase, so some might run into issues while cloning this repo. Hence, it is advisable to use -`git clone --depth=1 ` to clone it faster. +### Faster clones -Run `jake build` after every change. If you want to test it locally in some another project then use `node /built/local/tsc.js` in place of `tsc` in your project. For example, to run `tsc --watch`, use `node /TypeScript/built/local/tsc.js --watch`. +The TypeScript repository is relatively large. To save some time, you might want to clone it without the repo's full history using +`git clone --depth=1` to save time. + +### Using local builds + +Run `jake build` to build a version of the compiler/language service that reflects changes you've made. You can then run `node /built/local/tsc.js` in place of `tsc` in your project. For example, to run `tsc --watch` from within the root of the repository on a file called `test.ts`, you can run `node ./built/local/tsc.js --watch test.ts`. ## Contributing bug fixes From 2e993230e64297da493d2d5b4908fc22161c0561 Mon Sep 17 00:00:00 2001 From: Collins Abitekaniza Date: Tue, 16 Oct 2018 05:09:46 +0300 Subject: [PATCH 09/49] use decl key value if any --- src/compiler/checker.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 9a443e6c444..a94f0c2cf9b 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -6288,7 +6288,7 @@ namespace ts { // If we have an existing early-bound member, combine its declarations so that we can // report an error at each declaration. const declarations = earlySymbol ? concatenate(earlySymbol.declarations, lateSymbol.declarations) : lateSymbol.declarations; - const name = declarationNameToString(decl.name); + const name = (type).value || declarationNameToString(decl.name) forEach(declarations, declaration => error(getNameOfDeclaration(declaration) || declaration, Diagnostics.Duplicate_declaration_0, name)); error(decl.name || decl, Diagnostics.Duplicate_declaration_0, name); lateSymbol = createSymbol(SymbolFlags.None, memberName, CheckFlags.Late); From 66b299dc6ecdb3e54af946d0fc4a349cf0e9249d Mon Sep 17 00:00:00 2001 From: Collins Abitekaniza Date: Tue, 16 Oct 2018 05:17:14 +0300 Subject: [PATCH 10/49] refactor diagnostics --- src/compiler/checker.ts | 6 +++--- src/compiler/diagnosticMessages.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index a94f0c2cf9b..c9065c96be1 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -6288,9 +6288,9 @@ namespace ts { // If we have an existing early-bound member, combine its declarations so that we can // report an error at each declaration. const declarations = earlySymbol ? concatenate(earlySymbol.declarations, lateSymbol.declarations) : lateSymbol.declarations; - const name = (type).value || declarationNameToString(decl.name) - forEach(declarations, declaration => error(getNameOfDeclaration(declaration) || declaration, Diagnostics.Duplicate_declaration_0, name)); - error(decl.name || decl, Diagnostics.Duplicate_declaration_0, name); + const name = (type).value || declarationNameToString(decl.name); + forEach(declarations, declaration => error(getNameOfDeclaration(declaration) || declaration, Diagnostics.Duplicate_property_0, name)); + error(decl.name || decl, Diagnostics.Duplicate_property_0, name); lateSymbol = createSymbol(SymbolFlags.None, memberName, CheckFlags.Late); } lateSymbol.nameType = type; diff --git a/src/compiler/diagnosticMessages.json b/src/compiler/diagnosticMessages.json index 65a9e4bafb2..92ae359e1d2 100644 --- a/src/compiler/diagnosticMessages.json +++ b/src/compiler/diagnosticMessages.json @@ -2425,7 +2425,7 @@ "category": "Error", "code": 2717 }, - "Duplicate declaration '{0}'.": { + "Duplicate property '{0}'.": { "category": "Error", "code": 2718 }, From f70f8eb70d00bc60cf1f6817962fa8ab4e176b9d Mon Sep 17 00:00:00 2001 From: Collins Abitekaniza Date: Tue, 16 Oct 2018 07:57:02 +0300 Subject: [PATCH 11/49] refactor baseline --- tests/baselines/reference/dynamicNamesErrors.errors.txt | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tests/baselines/reference/dynamicNamesErrors.errors.txt b/tests/baselines/reference/dynamicNamesErrors.errors.txt index 0d4f44a59f5..cdc5cef7f8d 100644 --- a/tests/baselines/reference/dynamicNamesErrors.errors.txt +++ b/tests/baselines/reference/dynamicNamesErrors.errors.txt @@ -1,5 +1,5 @@ -tests/cases/compiler/dynamicNamesErrors.ts(5,5): error TS2718: Duplicate declaration '[c0]'. -tests/cases/compiler/dynamicNamesErrors.ts(6,5): error TS2718: Duplicate declaration '[c0]'. +tests/cases/compiler/dynamicNamesErrors.ts(5,5): error TS2718: Duplicate property '1'. +tests/cases/compiler/dynamicNamesErrors.ts(6,5): error TS2718: Duplicate property '1'. tests/cases/compiler/dynamicNamesErrors.ts(19,5): error TS2717: Subsequent property declarations must have the same type. Property '[c1]' must be of type 'number', but here has type 'string'. tests/cases/compiler/dynamicNamesErrors.ts(24,1): error TS2322: Type 'T2' is not assignable to type 'T1'. Types of property '[c0]' are incompatible. @@ -16,10 +16,10 @@ tests/cases/compiler/dynamicNamesErrors.ts(25,1): error TS2322: Type 'T1' is not interface T0 { [c0]: number; ~~~~ -!!! error TS2718: Duplicate declaration '[c0]'. +!!! error TS2718: Duplicate property '1'. 1: number; ~ -!!! error TS2718: Duplicate declaration '[c0]'. +!!! error TS2718: Duplicate property '1'. } interface T1 { From d396830386f7adc1c2bb606f0dccb44884fe193c Mon Sep 17 00:00:00 2001 From: Collins Abitekaniza Date: Tue, 16 Oct 2018 21:48:47 +0300 Subject: [PATCH 12/49] add error showing where prop was also declared if is a dup --- src/compiler/checker.ts | 2 +- src/compiler/diagnosticMessages.json | 4 ++++ tests/baselines/reference/dynamicNamesErrors.errors.txt | 4 ++-- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index c9065c96be1..6c276eb8638 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -6289,7 +6289,7 @@ namespace ts { // report an error at each declaration. const declarations = earlySymbol ? concatenate(earlySymbol.declarations, lateSymbol.declarations) : lateSymbol.declarations; const name = (type).value || declarationNameToString(decl.name); - forEach(declarations, declaration => error(getNameOfDeclaration(declaration) || declaration, Diagnostics.Duplicate_property_0, name)); + forEach(declarations, declaration => error(getNameOfDeclaration(declaration) || declaration, Diagnostics.Property_0_was_also_declared_here, name)); error(decl.name || decl, Diagnostics.Duplicate_property_0, name); lateSymbol = createSymbol(SymbolFlags.None, memberName, CheckFlags.Late); } diff --git a/src/compiler/diagnosticMessages.json b/src/compiler/diagnosticMessages.json index 92ae359e1d2..941d3f6053c 100644 --- a/src/compiler/diagnosticMessages.json +++ b/src/compiler/diagnosticMessages.json @@ -2485,6 +2485,10 @@ "category": "Error", "code": 2732 }, + "Property '{0}' was also declared here.": { + "category": "Error", + "code": 2733 + }, "It is highly likely that you are missing a semicolon.": { "category": "Error", "code": 2734 diff --git a/tests/baselines/reference/dynamicNamesErrors.errors.txt b/tests/baselines/reference/dynamicNamesErrors.errors.txt index cdc5cef7f8d..c39140dbd52 100644 --- a/tests/baselines/reference/dynamicNamesErrors.errors.txt +++ b/tests/baselines/reference/dynamicNamesErrors.errors.txt @@ -1,5 +1,5 @@ tests/cases/compiler/dynamicNamesErrors.ts(5,5): error TS2718: Duplicate property '1'. -tests/cases/compiler/dynamicNamesErrors.ts(6,5): error TS2718: Duplicate property '1'. +tests/cases/compiler/dynamicNamesErrors.ts(6,5): error TS2733: Property '1' was also declared here. tests/cases/compiler/dynamicNamesErrors.ts(19,5): error TS2717: Subsequent property declarations must have the same type. Property '[c1]' must be of type 'number', but here has type 'string'. tests/cases/compiler/dynamicNamesErrors.ts(24,1): error TS2322: Type 'T2' is not assignable to type 'T1'. Types of property '[c0]' are incompatible. @@ -19,7 +19,7 @@ tests/cases/compiler/dynamicNamesErrors.ts(25,1): error TS2322: Type 'T1' is not !!! error TS2718: Duplicate property '1'. 1: number; ~ -!!! error TS2718: Duplicate property '1'. +!!! error TS2733: Property '1' was also declared here. } interface T1 { From 41908052d76a7bdf4312cfcdc390293b139dede5 Mon Sep 17 00:00:00 2001 From: Manish Bansal Date: Fri, 19 Oct 2018 23:12:23 +0530 Subject: [PATCH 13/49] Corrected the order of passing arguments to word2mdJs --- Gulpfile.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Gulpfile.js b/Gulpfile.js index 704fbba4447..7a009ea196e 100644 --- a/Gulpfile.js +++ b/Gulpfile.js @@ -26,7 +26,7 @@ const exec = require("./scripts/build/exec"); const browserify = require("./scripts/build/browserify"); const prepend = require("./scripts/build/prepend"); const { removeSourceMaps } = require("./scripts/build/sourcemaps"); -const { CancellationTokenSource, CancelError, delay, Semaphore } = require("prex"); +const { CancellationTokenSource, CancelError, delay, Semaphore } = require("prex"); const { libraryTargets, generateLibs } = require("./scripts/build/lib"); const { runConsoleTests, cleanTestDirs, writeTestConfigFile, refBaseline, localBaseline, refRwcBaseline, localRwcBaseline } = require("./scripts/build/tests"); @@ -273,7 +273,7 @@ gulp.task( // Generate Markdown spec const specMd = "doc/spec.md"; gulp.task(specMd, /*help*/ false, [word2mdJs], () => - exec("cscript", ["//nologo", word2mdJs, path.resolve(specMd), path.resolve("doc/TypeScript Language Specification.docx")])); + exec("cscript", ["//nologo", word2mdJs, path.resolve("doc/TypeScript Language Specification.docx"), path.resolve(specMd)])); gulp.task( "generate-spec", @@ -585,7 +585,7 @@ gulp.task( project.waitForWorkToStart().then(() => { source.cancel(); }); - + if (cmdLineOptions.tests || cmdLineOptions.failed) { await runConsoleTests(runJs, "mocha-fivemat-progress-reporter", /*runInParallel*/ false, /*watchMode*/ true, source.token); } From 39e533a97ef4bbb2e6320264d463cf8c9f5ab829 Mon Sep 17 00:00:00 2001 From: Siddharth Singh Date: Mon, 22 Oct 2018 03:33:11 +0530 Subject: [PATCH 14/49] Typo fix Changed "mean" to "meant" --- src/lib/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lib/README.md b/src/lib/README.md index 93c62e317bf..1b51e2cfc64 100644 --- a/src/lib/README.md +++ b/src/lib/README.md @@ -4,5 +4,5 @@ The files within this directory are used to generate `lib.d.ts` and `lib.es6.d.t ## Generated files -Any files ending in `.generated.d.ts` aren't mean to be edited by hand. +Any files ending in `.generated.d.ts` aren't meant to be edited by hand. If you need to make changes to such files, make a change to the input files for [**our library generator**](https://github.com/Microsoft/TSJS-lib-generator). From f58d1737035b78e10bc5224e8b1e6e897901098d Mon Sep 17 00:00:00 2001 From: Sanket Mishra Date: Thu, 25 Oct 2018 10:00:51 +0530 Subject: [PATCH 15/49] Fixed typos in spec.md Changed 're-factoring' to 'refactoring'. Changed 'screen shot' to 'screenshot'. --- doc/spec.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/doc/spec.md b/doc/spec.md index c6dd8cb4d06..edf8455ac54 100644 --- a/doc/spec.md +++ b/doc/spec.md @@ -239,7 +239,7 @@ TypeScript is a trademark of Microsoft Corporation. # 1 Introduction -JavaScript applications such as web e-mail, maps, document editing, and collaboration tools are becoming an increasingly important part of the everyday computing. We designed TypeScript to meet the needs of the JavaScript programming teams that build and maintain large JavaScript programs. TypeScript helps programming teams to define interfaces between software components and to gain insight into the behavior of existing JavaScript libraries. TypeScript also enables teams to reduce naming conflicts by organizing their code into dynamically-loadable modules. TypeScript's optional type system enables JavaScript programmers to use highly-productive development tools and practices: static checking, symbol-based navigation, statement completion, and code re-factoring. +JavaScript applications such as web e-mail, maps, document editing, and collaboration tools are becoming an increasingly important part of the everyday computing. We designed TypeScript to meet the needs of the JavaScript programming teams that build and maintain large JavaScript programs. TypeScript helps programming teams to define interfaces between software components and to gain insight into the behavior of existing JavaScript libraries. TypeScript also enables teams to reduce naming conflicts by organizing their code into dynamically-loadable modules. TypeScript's optional type system enables JavaScript programmers to use highly-productive development tools and practices: static checking, symbol-based navigation, statement completion, and code refactoring. TypeScript is a syntactic sugar for JavaScript. TypeScript syntax is a superset of ECMAScript 2015 (ES2015) syntax. Every JavaScript program is also a TypeScript program. The TypeScript compiler performs only file-local transformations on TypeScript programs and does not re-order variables declared in TypeScript. This leads to JavaScript output that closely matches the TypeScript input. TypeScript does not transform variable names, making tractable the direct debugging of emitted JavaScript. TypeScript optionally provides source maps, enabling source-level debugging. TypeScript tools typically emit JavaScript upon file save, preserving the test, edit, refresh cycle commonly used in JavaScript development. @@ -263,7 +263,7 @@ function f() { } ``` -To benefit from this inference, a programmer can use the TypeScript language service. For example, a code editor can incorporate the TypeScript language service and use the service to find the members of a string object as in the following screen shot. +To benefit from this inference, a programmer can use the TypeScript language service. For example, a code editor can incorporate the TypeScript language service and use the service to find the members of a string object as in the following screenshot.   ![](images/image1.png) @@ -411,7 +411,7 @@ We mentioned above that the '$' function behaves differently depending on the ty This signature denotes that a function may be passed as the parameter of the '$' function. When a function is passed to '$', the jQuery library will invoke that function when a DOM document is ready. Because TypeScript supports overloading, tools can use TypeScript to show all available function signatures with their documentation tips and to give the correct documentation once a function has been called with a particular signature. -A typical client would not need to add any additional typing but could just use a community-supplied typing to discover (through statement completion with documentation tips) and verify (through static checking) correct use of the library, as in the following screen shot. +A typical client would not need to add any additional typing but could just use a community-supplied typing to discover (through statement completion with documentation tips) and verify (through static checking) correct use of the library, as in the following screenshot.   ![](images/image2.png) @@ -628,7 +628,7 @@ JavaScript implementations can use these explicit constants to generate efficien An important goal of TypeScript is to provide accurate and straightforward types for existing JavaScript programming patterns. To that end, TypeScript includes generic types, discussed in the next section, and *overloading on string parameters*, the topic of this section. -JavaScript programming interfaces often include functions whose behavior is discriminated by a string constant passed to the function. The Document Object Model makes heavy use of this pattern. For example, the following screen shot shows that the 'createElement' method of the 'document' object has multiple signatures, some of which identify the types returned when specific strings are passed into the method. +JavaScript programming interfaces often include functions whose behavior is discriminated by a string constant passed to the function. The Document Object Model makes heavy use of this pattern. For example, the following screenshot shows that the 'createElement' method of the 'document' object has multiple signatures, some of which identify the types returned when specific strings are passed into the method.   ![](images/image3.png) @@ -639,7 +639,7 @@ var span = document.createElement("span"); span.isMultiLine = false; // OK: HTMLSpanElement has isMultiline property ``` -In the following screen shot, a programming tool combines information from overloading on string parameters with contextual typing to infer that the type of the variable 'e' is 'MouseEvent' and that therefore 'e' has a 'clientX' property. +In the following screenshot, a programming tool combines information from overloading on string parameters with contextual typing to infer that the type of the variable 'e' is 'MouseEvent' and that therefore 'e' has a 'clientX' property.   ![](images/image4.png) From 1ec54f3b7fa58f4114a014147176e8a08baeacf3 Mon Sep 17 00:00:00 2001 From: superkd37 <42697593+superkd37@users.noreply.github.com> Date: Sat, 27 Oct 2018 20:39:23 +0530 Subject: [PATCH 16/49] Update .mailmap --- .mailmap | 1 + 1 file changed, 1 insertion(+) diff --git a/.mailmap b/.mailmap index 5b591eb4615..cb3334a9404 100644 --- a/.mailmap +++ b/.mailmap @@ -121,6 +121,7 @@ Ken Howard Kevin Lang kimamula # Kenji Imamula Kitson Kelly +Krishnadas Babu Klaus Meinhardt Kyle Kelley Lorant Pinter From 208148d05c6d2c2f0cee93a9bcc913dee1286198 Mon Sep 17 00:00:00 2001 From: Ron Buckton Date: Mon, 14 Jan 2019 17:47:52 -0800 Subject: [PATCH 17/49] Fix crash in getTextOfPropertyName --- src/compiler/checker.ts | 36 ++++++---- src/compiler/utilities.ts | 3 +- .../crashInGetTextOfComputedPropertyName.js | 48 +++++++++++++ ...ashInGetTextOfComputedPropertyName.symbols | 71 +++++++++++++++++++ ...crashInGetTextOfComputedPropertyName.types | 71 +++++++++++++++++++ .../crashInGetTextOfComputedPropertyName.ts | 30 ++++++++ 6 files changed, 243 insertions(+), 16 deletions(-) create mode 100644 tests/baselines/reference/crashInGetTextOfComputedPropertyName.js create mode 100644 tests/baselines/reference/crashInGetTextOfComputedPropertyName.symbols create mode 100644 tests/baselines/reference/crashInGetTextOfComputedPropertyName.types create mode 100644 tests/cases/compiler/crashInGetTextOfComputedPropertyName.ts diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index b48ba6bbcd6..48232a2e026 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -6447,6 +6447,13 @@ namespace ts { return isDynamicName(node) && !isLateBindableName(node); } + /** + * Gets the late-bound name for a computed property name. + */ + function getLateBoundName(node: LateBoundName) { + return getLateBoundNameFromType(checkComputedPropertyName(node)); + } + /** * Gets the symbolic name for a late-bound member from its type. */ @@ -7354,7 +7361,7 @@ namespace ts { function isTypeInvalidDueToUnionDiscriminant(contextualType: Type, obj: ObjectLiteralExpression | JsxAttributes): boolean { const list = obj.properties as NodeArray; return list.some(property => { - const name = property.name && getTextOfPropertyName(property.name); + const name = property.name && !isComputedNonLiteralName(property.name) ? getTextOfPropertyName(property.name) : undefined; const expected = name === undefined ? undefined : getTypeOfPropertyOfType(contextualType, name); return !!expected && isLiteralType(expected) && !isTypeIdenticalTo(getTypeOfNode(property), expected); }); @@ -15059,7 +15066,10 @@ namespace ts { } function getTypeOfDestructuredProperty(type: Type, name: PropertyName) { - const text = getTextOfPropertyName(name); + const text = !isComputedNonLiteralName(name) ? getTextOfPropertyName(name) : + isLateBindableName(name) ? getLateBoundName(name) : + undefined; + if (text === undefined) return errorType; return getConstraintForLocation(getTypeOfPropertyOfType(type, text), name) || isNumericLiteralName(text) && getIndexTypeOfType(type, IndexKind.Number) || getIndexTypeOfType(type, IndexKind.String) || @@ -17191,11 +17201,9 @@ namespace ts { const parentDeclaration = declaration.parent.parent; const name = declaration.propertyName || declaration.name; const parentType = getContextualTypeForVariableLikeDeclaration(parentDeclaration); - if (parentType && !isBindingPattern(name)) { + if (parentType && !isBindingPattern(name) && !isComputedNonLiteralName(name)) { const text = getTextOfPropertyName(name); - if (text !== undefined) { - return getTypeOfPropertyOfType(parentType, text); - } + return getTypeOfPropertyOfType(parentType, text); } } @@ -22201,8 +22209,8 @@ namespace ts { function checkObjectLiteralDestructuringPropertyAssignment(objectLiteralType: Type, property: ObjectLiteralElementLike, allProperties?: NodeArray, rightIsThis = false) { if (property.kind === SyntaxKind.PropertyAssignment || property.kind === SyntaxKind.ShorthandPropertyAssignment) { const name = property.name; - const text = getTextOfPropertyName(name); - if (text) { + if (!isComputedNonLiteralName(name)) { + const text = getTextOfPropertyName(name); const prop = getPropertyOfType(objectLiteralType, text); if (prop) { markPropertyAsReferenced(prop, property, rightIsThis); @@ -25524,14 +25532,12 @@ namespace ts { const parent = node.parent.parent; const parentType = getTypeForBindingElementParent(parent); const name = node.propertyName || node.name; - if (!isBindingPattern(name)) { + if (!isBindingPattern(name) && !isComputedNonLiteralName(name)) { const nameText = getTextOfPropertyName(name); - if (nameText) { - const property = getPropertyOfType(parentType!, nameText); // TODO: GH#18217 - if (property) { - markPropertyAsReferenced(property, /*nodeForCheckWriteOnly*/ undefined, /*isThisAccess*/ false); // A destructuring is never a write-only reference. - checkPropertyAccessibility(parent, !!parent.initializer && parent.initializer.kind === SyntaxKind.SuperKeyword, parentType!, property); - } + const property = getPropertyOfType(parentType!, nameText); // TODO: GH#18217 + if (property) { + markPropertyAsReferenced(property, /*nodeForCheckWriteOnly*/ undefined, /*isThisAccess*/ false); // A destructuring is never a write-only reference. + checkPropertyAccessibility(parent, !!parent.initializer && parent.initializer.kind === SyntaxKind.SuperKeyword, parentType!, property); } } } diff --git a/src/compiler/utilities.ts b/src/compiler/utilities.ts index 9c6b27de13c..3964c487fc2 100644 --- a/src/compiler/utilities.ts +++ b/src/compiler/utilities.ts @@ -778,7 +778,8 @@ namespace ts { case SyntaxKind.NoSubstitutionTemplateLiteral: return escapeLeadingUnderscores(name.text); case SyntaxKind.ComputedPropertyName: - return isStringOrNumericLiteralLike(name.expression) ? escapeLeadingUnderscores(name.expression.text) : undefined!; // TODO: GH#18217 Almost all uses of this assume the result to be defined! + if (isStringOrNumericLiteralLike(name.expression)) return escapeLeadingUnderscores(name.expression.text); + return Debug.fail("Text of property name cannot be read from non-literal-valued ComputedPropertyNames"); default: return Debug.assertNever(name); } diff --git a/tests/baselines/reference/crashInGetTextOfComputedPropertyName.js b/tests/baselines/reference/crashInGetTextOfComputedPropertyName.js new file mode 100644 index 00000000000..71d5df00e2a --- /dev/null +++ b/tests/baselines/reference/crashInGetTextOfComputedPropertyName.js @@ -0,0 +1,48 @@ +//// [crashInGetTextOfComputedPropertyName.ts] +// https://github.com/Microsoft/TypeScript/issues/29006 +export interface A { type: 'a' } +export interface B { type: 'b' } +export type AB = A | B + +const itemId = 'some-id' + +// --- test on first level --- +const items: { [id: string]: AB } = {} +const { [itemId]: itemOk1 } = items +typeof itemOk1 // pass + +// --- test on second level --- +interface ObjWithItems { + items: {[s: string]: AB} +} +const objWithItems: ObjWithItems = { items: {}} + +const itemOk2 = objWithItems.items[itemId] +typeof itemOk2 // pass + +const { + items: { [itemId]: itemWithTSError } = {} /*happens when default value is provided*/ +} = objWithItems + +// in order to re-produce the error, uncomment next line: +typeof itemWithTSError // :( + +// will result in: +// Error from compilation: TypeError: Cannot read property 'charCodeAt' of undefined TypeError: Cannot read property 'charCodeAt' of undefined + +//// [crashInGetTextOfComputedPropertyName.js] +"use strict"; +exports.__esModule = true; +var itemId = 'some-id'; +// --- test on first level --- +var items = {}; +var _a = itemId, itemOk1 = items[_a]; +typeof itemOk1; // pass +var objWithItems = { items: {} }; +var itemOk2 = objWithItems.items[itemId]; +typeof itemOk2; // pass +var _b = objWithItems.items /*happens when default value is provided*/, _c = itemId, itemWithTSError = (_b === void 0 ? {} /*happens when default value is provided*/ : _b)[_c]; +// in order to re-produce the error, uncomment next line: +typeof itemWithTSError; // :( +// will result in: +// Error from compilation: TypeError: Cannot read property 'charCodeAt' of undefined TypeError: Cannot read property 'charCodeAt' of undefined diff --git a/tests/baselines/reference/crashInGetTextOfComputedPropertyName.symbols b/tests/baselines/reference/crashInGetTextOfComputedPropertyName.symbols new file mode 100644 index 00000000000..d0f1721258c --- /dev/null +++ b/tests/baselines/reference/crashInGetTextOfComputedPropertyName.symbols @@ -0,0 +1,71 @@ +=== tests/cases/compiler/crashInGetTextOfComputedPropertyName.ts === +// https://github.com/Microsoft/TypeScript/issues/29006 +export interface A { type: 'a' } +>A : Symbol(A, Decl(crashInGetTextOfComputedPropertyName.ts, 0, 0)) +>type : Symbol(A.type, Decl(crashInGetTextOfComputedPropertyName.ts, 1, 20)) + +export interface B { type: 'b' } +>B : Symbol(B, Decl(crashInGetTextOfComputedPropertyName.ts, 1, 32)) +>type : Symbol(B.type, Decl(crashInGetTextOfComputedPropertyName.ts, 2, 20)) + +export type AB = A | B +>AB : Symbol(AB, Decl(crashInGetTextOfComputedPropertyName.ts, 2, 32)) +>A : Symbol(A, Decl(crashInGetTextOfComputedPropertyName.ts, 0, 0)) +>B : Symbol(B, Decl(crashInGetTextOfComputedPropertyName.ts, 1, 32)) + +const itemId = 'some-id' +>itemId : Symbol(itemId, Decl(crashInGetTextOfComputedPropertyName.ts, 5, 5)) + +// --- test on first level --- +const items: { [id: string]: AB } = {} +>items : Symbol(items, Decl(crashInGetTextOfComputedPropertyName.ts, 8, 5)) +>id : Symbol(id, Decl(crashInGetTextOfComputedPropertyName.ts, 8, 16)) +>AB : Symbol(AB, Decl(crashInGetTextOfComputedPropertyName.ts, 2, 32)) + +const { [itemId]: itemOk1 } = items +>itemId : Symbol(itemId, Decl(crashInGetTextOfComputedPropertyName.ts, 5, 5)) +>itemOk1 : Symbol(itemOk1, Decl(crashInGetTextOfComputedPropertyName.ts, 9, 7)) +>items : Symbol(items, Decl(crashInGetTextOfComputedPropertyName.ts, 8, 5)) + +typeof itemOk1 // pass +>itemOk1 : Symbol(itemOk1, Decl(crashInGetTextOfComputedPropertyName.ts, 9, 7)) + +// --- test on second level --- +interface ObjWithItems { +>ObjWithItems : Symbol(ObjWithItems, Decl(crashInGetTextOfComputedPropertyName.ts, 10, 14)) + + items: {[s: string]: AB} +>items : Symbol(ObjWithItems.items, Decl(crashInGetTextOfComputedPropertyName.ts, 13, 24)) +>s : Symbol(s, Decl(crashInGetTextOfComputedPropertyName.ts, 14, 13)) +>AB : Symbol(AB, Decl(crashInGetTextOfComputedPropertyName.ts, 2, 32)) +} +const objWithItems: ObjWithItems = { items: {}} +>objWithItems : Symbol(objWithItems, Decl(crashInGetTextOfComputedPropertyName.ts, 16, 5)) +>ObjWithItems : Symbol(ObjWithItems, Decl(crashInGetTextOfComputedPropertyName.ts, 10, 14)) +>items : Symbol(items, Decl(crashInGetTextOfComputedPropertyName.ts, 16, 36)) + +const itemOk2 = objWithItems.items[itemId] +>itemOk2 : Symbol(itemOk2, Decl(crashInGetTextOfComputedPropertyName.ts, 18, 5)) +>objWithItems.items : Symbol(ObjWithItems.items, Decl(crashInGetTextOfComputedPropertyName.ts, 13, 24)) +>objWithItems : Symbol(objWithItems, Decl(crashInGetTextOfComputedPropertyName.ts, 16, 5)) +>items : Symbol(ObjWithItems.items, Decl(crashInGetTextOfComputedPropertyName.ts, 13, 24)) +>itemId : Symbol(itemId, Decl(crashInGetTextOfComputedPropertyName.ts, 5, 5)) + +typeof itemOk2 // pass +>itemOk2 : Symbol(itemOk2, Decl(crashInGetTextOfComputedPropertyName.ts, 18, 5)) + +const { + items: { [itemId]: itemWithTSError } = {} /*happens when default value is provided*/ +>items : Symbol(ObjWithItems.items, Decl(crashInGetTextOfComputedPropertyName.ts, 13, 24)) +>itemId : Symbol(itemId, Decl(crashInGetTextOfComputedPropertyName.ts, 5, 5)) +>itemWithTSError : Symbol(itemWithTSError, Decl(crashInGetTextOfComputedPropertyName.ts, 22, 12)) + +} = objWithItems +>objWithItems : Symbol(objWithItems, Decl(crashInGetTextOfComputedPropertyName.ts, 16, 5)) + +// in order to re-produce the error, uncomment next line: +typeof itemWithTSError // :( +>itemWithTSError : Symbol(itemWithTSError, Decl(crashInGetTextOfComputedPropertyName.ts, 22, 12)) + +// will result in: +// Error from compilation: TypeError: Cannot read property 'charCodeAt' of undefined TypeError: Cannot read property 'charCodeAt' of undefined diff --git a/tests/baselines/reference/crashInGetTextOfComputedPropertyName.types b/tests/baselines/reference/crashInGetTextOfComputedPropertyName.types new file mode 100644 index 00000000000..7d9ce4aa34b --- /dev/null +++ b/tests/baselines/reference/crashInGetTextOfComputedPropertyName.types @@ -0,0 +1,71 @@ +=== tests/cases/compiler/crashInGetTextOfComputedPropertyName.ts === +// https://github.com/Microsoft/TypeScript/issues/29006 +export interface A { type: 'a' } +>type : "a" + +export interface B { type: 'b' } +>type : "b" + +export type AB = A | B +>AB : AB + +const itemId = 'some-id' +>itemId : "some-id" +>'some-id' : "some-id" + +// --- test on first level --- +const items: { [id: string]: AB } = {} +>items : { [id: string]: AB; } +>id : string +>{} : {} + +const { [itemId]: itemOk1 } = items +>itemId : "some-id" +>itemOk1 : AB +>items : { [id: string]: AB; } + +typeof itemOk1 // pass +>typeof itemOk1 : "string" | "number" | "bigint" | "boolean" | "symbol" | "undefined" | "object" | "function" +>itemOk1 : AB + +// --- test on second level --- +interface ObjWithItems { + items: {[s: string]: AB} +>items : { [s: string]: AB; } +>s : string +} +const objWithItems: ObjWithItems = { items: {}} +>objWithItems : ObjWithItems +>{ items: {}} : { items: {}; } +>items : {} +>{} : {} + +const itemOk2 = objWithItems.items[itemId] +>itemOk2 : AB +>objWithItems.items[itemId] : AB +>objWithItems.items : { [s: string]: AB; } +>objWithItems : ObjWithItems +>items : { [s: string]: AB; } +>itemId : "some-id" + +typeof itemOk2 // pass +>typeof itemOk2 : "string" | "number" | "bigint" | "boolean" | "symbol" | "undefined" | "object" | "function" +>itemOk2 : AB + +const { + items: { [itemId]: itemWithTSError } = {} /*happens when default value is provided*/ +>items : any +>itemId : "some-id" +>itemWithTSError : AB +>{} : {} + +} = objWithItems +>objWithItems : ObjWithItems + +// in order to re-produce the error, uncomment next line: +typeof itemWithTSError // :( +>typeof itemWithTSError : "string" | "number" | "bigint" | "boolean" | "symbol" | "undefined" | "object" | "function" +>itemWithTSError : AB + +// will result in: +// Error from compilation: TypeError: Cannot read property 'charCodeAt' of undefined TypeError: Cannot read property 'charCodeAt' of undefined diff --git a/tests/cases/compiler/crashInGetTextOfComputedPropertyName.ts b/tests/cases/compiler/crashInGetTextOfComputedPropertyName.ts new file mode 100644 index 00000000000..d7ad08dd812 --- /dev/null +++ b/tests/cases/compiler/crashInGetTextOfComputedPropertyName.ts @@ -0,0 +1,30 @@ +// https://github.com/Microsoft/TypeScript/issues/29006 +export interface A { type: 'a' } +export interface B { type: 'b' } +export type AB = A | B + +const itemId = 'some-id' + +// --- test on first level --- +const items: { [id: string]: AB } = {} +const { [itemId]: itemOk1 } = items +typeof itemOk1 // pass + +// --- test on second level --- +interface ObjWithItems { + items: {[s: string]: AB} +} +const objWithItems: ObjWithItems = { items: {}} + +const itemOk2 = objWithItems.items[itemId] +typeof itemOk2 // pass + +const { + items: { [itemId]: itemWithTSError } = {} /*happens when default value is provided*/ +} = objWithItems + +// in order to re-produce the error, uncomment next line: +typeof itemWithTSError // :( + +// will result in: +// Error from compilation: TypeError: Cannot read property 'charCodeAt' of undefined TypeError: Cannot read property 'charCodeAt' of undefined \ No newline at end of file From 5651789629a652d8bf06a965f94f744b34d10f21 Mon Sep 17 00:00:00 2001 From: Jack Williams Date: Thu, 17 Jan 2019 20:03:46 +0000 Subject: [PATCH 18/49] Fix #29457 Use allTypesAssignableToKind instead of isTypeAssignableToKind to account for union types. --- src/compiler/checker.ts | 2 +- .../reference/inOperatorWithValidOperands.js | 14 +++++ .../inOperatorWithValidOperands.symbols | 58 ++++++++++++++----- .../inOperatorWithValidOperands.types | 22 +++++++ .../inOperator/inOperatorWithValidOperands.ts | 8 +++ 5 files changed, 87 insertions(+), 17 deletions(-) diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 20e6310f771..d110dfcf210 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -22153,7 +22153,7 @@ namespace ts { if (!(isTypeComparableTo(leftType, stringType) || isTypeAssignableToKind(leftType, TypeFlags.NumberLike | TypeFlags.ESSymbolLike))) { error(left, Diagnostics.The_left_hand_side_of_an_in_expression_must_be_of_type_any_string_number_or_symbol); } - if (!isTypeAssignableToKind(rightType, TypeFlags.NonPrimitive | TypeFlags.InstantiableNonPrimitive)) { + if (!allTypesAssignableToKind(rightType, TypeFlags.NonPrimitive | TypeFlags.InstantiableNonPrimitive)) { error(right, Diagnostics.The_right_hand_side_of_an_in_expression_must_be_of_type_any_an_object_type_or_a_type_parameter); } return booleanType; diff --git a/tests/baselines/reference/inOperatorWithValidOperands.js b/tests/baselines/reference/inOperatorWithValidOperands.js index 561abbe340b..f01380b35dd 100644 --- a/tests/baselines/reference/inOperatorWithValidOperands.js +++ b/tests/baselines/reference/inOperatorWithValidOperands.js @@ -23,6 +23,14 @@ function foo(t: T) { var rb3 = x in t; } +function unionCase(t: T | U) { + var rb4 = x in t; +} + +function unionCase2(t: T | object) { + var rb5 = x in t; +} + interface X { x: number } interface Y { y: number } @@ -53,6 +61,12 @@ var rb2 = x in {}; function foo(t) { var rb3 = x in t; } +function unionCase(t) { + var rb4 = x in t; +} +function unionCase2(t) { + var rb5 = x in t; +} var c1; var c2; var c3; diff --git a/tests/baselines/reference/inOperatorWithValidOperands.symbols b/tests/baselines/reference/inOperatorWithValidOperands.symbols index 75e561989e7..cbe0dbeef4a 100644 --- a/tests/baselines/reference/inOperatorWithValidOperands.symbols +++ b/tests/baselines/reference/inOperatorWithValidOperands.symbols @@ -59,35 +59,61 @@ function foo(t: T) { >t : Symbol(t, Decl(inOperatorWithValidOperands.ts, 20, 16)) } +function unionCase(t: T | U) { +>unionCase : Symbol(unionCase, Decl(inOperatorWithValidOperands.ts, 22, 1)) +>T : Symbol(T, Decl(inOperatorWithValidOperands.ts, 24, 19)) +>U : Symbol(U, Decl(inOperatorWithValidOperands.ts, 24, 21)) +>t : Symbol(t, Decl(inOperatorWithValidOperands.ts, 24, 25)) +>T : Symbol(T, Decl(inOperatorWithValidOperands.ts, 24, 19)) +>U : Symbol(U, Decl(inOperatorWithValidOperands.ts, 24, 21)) + + var rb4 = x in t; +>rb4 : Symbol(rb4, Decl(inOperatorWithValidOperands.ts, 25, 7)) +>x : Symbol(x, Decl(inOperatorWithValidOperands.ts, 0, 3)) +>t : Symbol(t, Decl(inOperatorWithValidOperands.ts, 24, 25)) +} + +function unionCase2(t: T | object) { +>unionCase2 : Symbol(unionCase2, Decl(inOperatorWithValidOperands.ts, 26, 1)) +>T : Symbol(T, Decl(inOperatorWithValidOperands.ts, 28, 20)) +>t : Symbol(t, Decl(inOperatorWithValidOperands.ts, 28, 23)) +>T : Symbol(T, Decl(inOperatorWithValidOperands.ts, 28, 20)) + + var rb5 = x in t; +>rb5 : Symbol(rb5, Decl(inOperatorWithValidOperands.ts, 29, 7)) +>x : Symbol(x, Decl(inOperatorWithValidOperands.ts, 0, 3)) +>t : Symbol(t, Decl(inOperatorWithValidOperands.ts, 28, 23)) +} + interface X { x: number } ->X : Symbol(X, Decl(inOperatorWithValidOperands.ts, 22, 1)) ->x : Symbol(X.x, Decl(inOperatorWithValidOperands.ts, 24, 13)) +>X : Symbol(X, Decl(inOperatorWithValidOperands.ts, 30, 1)) +>x : Symbol(X.x, Decl(inOperatorWithValidOperands.ts, 32, 13)) interface Y { y: number } ->Y : Symbol(Y, Decl(inOperatorWithValidOperands.ts, 24, 25)) ->y : Symbol(Y.y, Decl(inOperatorWithValidOperands.ts, 25, 13)) +>Y : Symbol(Y, Decl(inOperatorWithValidOperands.ts, 32, 25)) +>y : Symbol(Y.y, Decl(inOperatorWithValidOperands.ts, 33, 13)) var c1: X | Y; ->c1 : Symbol(c1, Decl(inOperatorWithValidOperands.ts, 27, 3)) ->X : Symbol(X, Decl(inOperatorWithValidOperands.ts, 22, 1)) ->Y : Symbol(Y, Decl(inOperatorWithValidOperands.ts, 24, 25)) +>c1 : Symbol(c1, Decl(inOperatorWithValidOperands.ts, 35, 3)) +>X : Symbol(X, Decl(inOperatorWithValidOperands.ts, 30, 1)) +>Y : Symbol(Y, Decl(inOperatorWithValidOperands.ts, 32, 25)) var c2: X; ->c2 : Symbol(c2, Decl(inOperatorWithValidOperands.ts, 28, 3)) ->X : Symbol(X, Decl(inOperatorWithValidOperands.ts, 22, 1)) +>c2 : Symbol(c2, Decl(inOperatorWithValidOperands.ts, 36, 3)) +>X : Symbol(X, Decl(inOperatorWithValidOperands.ts, 30, 1)) var c3: Y; ->c3 : Symbol(c3, Decl(inOperatorWithValidOperands.ts, 29, 3)) ->Y : Symbol(Y, Decl(inOperatorWithValidOperands.ts, 24, 25)) +>c3 : Symbol(c3, Decl(inOperatorWithValidOperands.ts, 37, 3)) +>Y : Symbol(Y, Decl(inOperatorWithValidOperands.ts, 32, 25)) var rc1 = x in c1; ->rc1 : Symbol(rc1, Decl(inOperatorWithValidOperands.ts, 31, 3)) +>rc1 : Symbol(rc1, Decl(inOperatorWithValidOperands.ts, 39, 3)) >x : Symbol(x, Decl(inOperatorWithValidOperands.ts, 0, 3)) ->c1 : Symbol(c1, Decl(inOperatorWithValidOperands.ts, 27, 3)) +>c1 : Symbol(c1, Decl(inOperatorWithValidOperands.ts, 35, 3)) var rc2 = x in (c2 || c3); ->rc2 : Symbol(rc2, Decl(inOperatorWithValidOperands.ts, 32, 3)) +>rc2 : Symbol(rc2, Decl(inOperatorWithValidOperands.ts, 40, 3)) >x : Symbol(x, Decl(inOperatorWithValidOperands.ts, 0, 3)) ->c2 : Symbol(c2, Decl(inOperatorWithValidOperands.ts, 28, 3)) ->c3 : Symbol(c3, Decl(inOperatorWithValidOperands.ts, 29, 3)) +>c2 : Symbol(c2, Decl(inOperatorWithValidOperands.ts, 36, 3)) +>c3 : Symbol(c3, Decl(inOperatorWithValidOperands.ts, 37, 3)) diff --git a/tests/baselines/reference/inOperatorWithValidOperands.types b/tests/baselines/reference/inOperatorWithValidOperands.types index 01d6c78b1f6..597454605c4 100644 --- a/tests/baselines/reference/inOperatorWithValidOperands.types +++ b/tests/baselines/reference/inOperatorWithValidOperands.types @@ -68,6 +68,28 @@ function foo(t: T) { >t : T } +function unionCase(t: T | U) { +>unionCase : (t: T | U) => void +>t : T | U + + var rb4 = x in t; +>rb4 : boolean +>x in t : boolean +>x : any +>t : T | U +} + +function unionCase2(t: T | object) { +>unionCase2 : (t: object | T) => void +>t : object | T + + var rb5 = x in t; +>rb5 : boolean +>x in t : boolean +>x : any +>t : object | T +} + interface X { x: number } >x : number diff --git a/tests/cases/conformance/expressions/binaryOperators/inOperator/inOperatorWithValidOperands.ts b/tests/cases/conformance/expressions/binaryOperators/inOperator/inOperatorWithValidOperands.ts index a4cdfd00a6b..738edca2bc3 100644 --- a/tests/cases/conformance/expressions/binaryOperators/inOperator/inOperatorWithValidOperands.ts +++ b/tests/cases/conformance/expressions/binaryOperators/inOperator/inOperatorWithValidOperands.ts @@ -22,6 +22,14 @@ function foo(t: T) { var rb3 = x in t; } +function unionCase(t: T | U) { + var rb4 = x in t; +} + +function unionCase2(t: T | object) { + var rb5 = x in t; +} + interface X { x: number } interface Y { y: number } From e38ac0d5a4178f3a3d93e86bd1fef4f53f6e2ecf Mon Sep 17 00:00:00 2001 From: kingwl Date: Sun, 20 Jan 2019 02:17:09 +0800 Subject: [PATCH 19/49] fix api --- tests/baselines/reference/api/tsserverlibrary.d.ts | 2 +- tests/baselines/reference/api/typescript.d.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/baselines/reference/api/tsserverlibrary.d.ts b/tests/baselines/reference/api/tsserverlibrary.d.ts index 6d3061f15b2..4353bbcd8fa 100644 --- a/tests/baselines/reference/api/tsserverlibrary.d.ts +++ b/tests/baselines/reference/api/tsserverlibrary.d.ts @@ -3097,7 +3097,7 @@ declare namespace ts { scanJsxIdentifier(): SyntaxKind; scanJsxAttributeValue(): SyntaxKind; reScanJsxToken(): JsxTokenSyntaxKind; - reScanLesserToken(): SyntaxKind; + reScanLessThanToken(): SyntaxKind; scanJsxToken(): JsxTokenSyntaxKind; scanJSDocToken(): JsDocSyntaxKind; scan(): SyntaxKind; diff --git a/tests/baselines/reference/api/typescript.d.ts b/tests/baselines/reference/api/typescript.d.ts index 377355210aa..d8deb32c0ef 100644 --- a/tests/baselines/reference/api/typescript.d.ts +++ b/tests/baselines/reference/api/typescript.d.ts @@ -3097,7 +3097,7 @@ declare namespace ts { scanJsxIdentifier(): SyntaxKind; scanJsxAttributeValue(): SyntaxKind; reScanJsxToken(): JsxTokenSyntaxKind; - reScanLesserToken(): SyntaxKind; + reScanLessThanToken(): SyntaxKind; scanJsxToken(): JsxTokenSyntaxKind; scanJSDocToken(): JsDocSyntaxKind; scan(): SyntaxKind; From 60639ce5a80c8a651ea98ec5c30842e434a54bbc Mon Sep 17 00:00:00 2001 From: Ron Buckton Date: Tue, 22 Jan 2019 14:24:21 -0800 Subject: [PATCH 20/49] Replace most instances of getTextOfPropertyName in checker --- src/compiler/checker.ts | 92 +++++++++---------- src/compiler/types.ts | 1 + .../reference/api/tsserverlibrary.d.ts | 1 + tests/baselines/reference/api/typescript.d.ts | 1 + ...InGetTextOfComputedPropertyName.errors.txt | 36 ++++++++ ...crashInGetTextOfComputedPropertyName.types | 6 +- .../destructureComputedProperty.errors.txt | 5 +- ...redLateBoundNameHasCorrectTypes.errors.txt | 11 ++- ...ructuredLateBoundNameHasCorrectTypes.types | 2 +- ...destructuringAssignment_private.errors.txt | 14 ++- .../destructuringAssignment_private.js | 11 +++ .../destructuringAssignment_private.symbols | 21 +++++ .../destructuringAssignment_private.types | 37 ++++++++ .../destructuringAssignment_private.ts | 6 ++ 14 files changed, 188 insertions(+), 56 deletions(-) create mode 100644 tests/baselines/reference/crashInGetTextOfComputedPropertyName.errors.txt diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 48232a2e026..d38111efa1e 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -5280,17 +5280,18 @@ namespace ts { let objectFlags = ObjectFlags.ObjectLiteral; forEach(pattern.elements, e => { const name = e.propertyName || e.name; - if (isComputedNonLiteralName(name)) { - // do not include computed properties in the implied type - objectFlags |= ObjectFlags.ObjectLiteralPatternWithComputedProperties; - return; - } if (e.dotDotDotToken) { stringIndexInfo = createIndexInfo(anyType, /*isReadonly*/ false); return; } - const text = getTextOfPropertyName(name); + const exprType = getLiteralTypeFromPropertyName(name); + if (!isTypeUsableAsPropertyName(exprType)) { + // do not include computed properties in the implied type + objectFlags |= ObjectFlags.ObjectLiteralPatternWithComputedProperties; + return; + } + const text = getPropertyNameFromType(exprType); const flags = SymbolFlags.Property | (e.initializer ? SymbolFlags.Optional : 0); const symbol = createSymbol(flags, text); symbol.type = getTypeFromBindingElement(e, includePatternInType, reportErrors); @@ -6399,9 +6400,9 @@ namespace ts { } /** - * Indicates whether a type can be used as a late-bound name. + * Indicates whether a type can be used as a property name. */ - function isTypeUsableAsLateBoundName(type: Type): type is LiteralType | UniqueESSymbolType { + function isTypeUsableAsPropertyName(type: Type): type is StringLiteralType | NumberLiteralType | UniqueESSymbolType { return !!(type.flags & TypeFlags.StringOrNumberLiteralOrUnique); } @@ -6416,7 +6417,7 @@ namespace ts { function isLateBindableName(node: DeclarationName): node is LateBoundName { return isComputedPropertyName(node) && isEntityNameExpression(node.expression) - && isTypeUsableAsLateBoundName(checkComputedPropertyName(node)); + && isTypeUsableAsPropertyName(checkComputedPropertyName(node)); } function isLateBoundName(name: __String): boolean { @@ -6448,21 +6449,14 @@ namespace ts { } /** - * Gets the late-bound name for a computed property name. + * Gets the symbolic name for a member from its type. */ - function getLateBoundName(node: LateBoundName) { - return getLateBoundNameFromType(checkComputedPropertyName(node)); - } - - /** - * Gets the symbolic name for a late-bound member from its type. - */ - function getLateBoundNameFromType(type: LiteralType | UniqueESSymbolType): __String { + function getPropertyNameFromType(type: StringLiteralType | NumberLiteralType | UniqueESSymbolType): __String { if (type.flags & TypeFlags.UniqueESSymbol) { - return `__@${type.symbol.escapedName}@${getSymbolId(type.symbol)}` as __String; + return (type).escapedName; } if (type.flags & (TypeFlags.StringLiteral | TypeFlags.NumberLiteral)) { - return escapeLeadingUnderscores("" + (type).value); + return escapeLeadingUnderscores("" + (type).value); } return Debug.fail(); } @@ -6525,8 +6519,8 @@ namespace ts { // fall back to the early-bound name of this member. links.resolvedSymbol = decl.symbol; const type = checkComputedPropertyName(decl.name); - if (isTypeUsableAsLateBoundName(type)) { - const memberName = getLateBoundNameFromType(type); + if (isTypeUsableAsPropertyName(type)) { + const memberName = getPropertyNameFromType(type); const symbolFlags = decl.symbol.flags; // Get or add a late-bound symbol for the member. This allows us to merge late-bound accessor declarations. @@ -7175,8 +7169,8 @@ namespace ts { const propType = instantiateType(templateType, templateMapper); // If the current iteration type constituent is a string literal type, create a property. // Otherwise, for type string create a string index signature. - if (t.flags & TypeFlags.StringOrNumberLiteralOrUnique) { - const propName = getLateBoundNameFromType(t as LiteralType); + if (isTypeUsableAsPropertyName(t)) { + const propName = getPropertyNameFromType(t); const modifiersProp = getPropertyOfType(modifiersType, propName); const isOptional = !!(templateModifiers & MappedTypeModifiers.IncludeOptional || !(templateModifiers & MappedTypeModifiers.ExcludeOptional) && modifiersProp && modifiersProp.flags & SymbolFlags.Optional); @@ -7361,7 +7355,8 @@ namespace ts { function isTypeInvalidDueToUnionDiscriminant(contextualType: Type, obj: ObjectLiteralExpression | JsxAttributes): boolean { const list = obj.properties as NodeArray; return list.some(property => { - const name = property.name && !isComputedNonLiteralName(property.name) ? getTextOfPropertyName(property.name) : undefined; + const nameType = property.name && getLiteralTypeFromPropertyName(property.name); + const name = nameType && isTypeUsableAsPropertyName(nameType) ? getPropertyNameFromType(nameType) : undefined; const expected = name === undefined ? undefined : getTypeOfPropertyOfType(contextualType, name); return !!expected && isLiteralType(expected) && !isTypeIdenticalTo(getTypeOfNode(property), expected); }); @@ -9724,8 +9719,8 @@ namespace ts { function getPropertyTypeForIndexType(objectType: Type, indexType: Type, accessNode: ElementAccessExpression | IndexedAccessTypeNode | PropertyName | BindingName | SyntheticExpression | undefined, cacheSymbol: boolean, missingType: Type) { const accessExpression = accessNode && accessNode.kind === SyntaxKind.ElementAccessExpression ? accessNode : undefined; - const propName = isTypeUsableAsLateBoundName(indexType) ? - getLateBoundNameFromType(indexType) : + const propName = isTypeUsableAsPropertyName(indexType) ? + getPropertyNameFromType(indexType) : accessExpression && checkThatExpressionIsProperSymbolReference(accessExpression.argumentExpression, indexType, /*reportError*/ false) ? getPropertyNameForKnownSymbolName(idText((accessExpression.argumentExpression).name)) : accessNode && isPropertyName(accessNode) ? @@ -10415,6 +10410,7 @@ namespace ts { function createUniqueESSymbolType(symbol: Symbol) { const type = createType(TypeFlags.UniqueESSymbol); type.symbol = symbol; + type.escapedName = `__@${type.symbol.escapedName}@${getSymbolId(type.symbol)}` as __String; return type; } @@ -11302,7 +11298,7 @@ namespace ts { } if (resultObj.error) { const reportedDiag = resultObj.error; - const propertyName = isTypeUsableAsLateBoundName(nameType) ? getLateBoundNameFromType(nameType) : undefined; + const propertyName = isTypeUsableAsPropertyName(nameType) ? getPropertyNameFromType(nameType) : undefined; const targetProp = propertyName !== undefined ? getPropertyOfType(target, propertyName) : undefined; let issuedElaboration = false; @@ -15066,10 +15062,9 @@ namespace ts { } function getTypeOfDestructuredProperty(type: Type, name: PropertyName) { - const text = !isComputedNonLiteralName(name) ? getTextOfPropertyName(name) : - isLateBindableName(name) ? getLateBoundName(name) : - undefined; - if (text === undefined) return errorType; + const nameType = getLiteralTypeFromPropertyName(name); + if (!isTypeUsableAsPropertyName(nameType)) return errorType; + const text = getPropertyNameFromType(nameType); return getConstraintForLocation(getTypeOfPropertyOfType(type, text), name) || isNumericLiteralName(text) && getIndexTypeOfType(type, IndexKind.Number) || getIndexTypeOfType(type, IndexKind.String) || @@ -17202,8 +17197,11 @@ namespace ts { const name = declaration.propertyName || declaration.name; const parentType = getContextualTypeForVariableLikeDeclaration(parentDeclaration); if (parentType && !isBindingPattern(name) && !isComputedNonLiteralName(name)) { - const text = getTextOfPropertyName(name); - return getTypeOfPropertyOfType(parentType, text); + const nameType = getLiteralTypeFromPropertyName(name); + if (isTypeUsableAsPropertyName(nameType)) { + const text = getPropertyNameFromType(nameType); + return getTypeOfPropertyOfType(parentType, text); + } } } @@ -18146,10 +18144,9 @@ namespace ts { } } typeFlags |= type.flags; - const nameType = computedNameType && computedNameType.flags & TypeFlags.StringOrNumberLiteralOrUnique ? - computedNameType : undefined; + const nameType = computedNameType && isTypeUsableAsPropertyName(computedNameType) ? computedNameType : undefined; const prop = nameType ? - createSymbol(SymbolFlags.Property | member.flags, getLateBoundNameFromType(nameType), CheckFlags.Late) : + createSymbol(SymbolFlags.Property | member.flags, getPropertyNameFromType(nameType), CheckFlags.Late) : createSymbol(SymbolFlags.Property | member.flags, member.escapedName); if (nameType) { prop.nameType = nameType; @@ -22209,15 +22206,15 @@ namespace ts { function checkObjectLiteralDestructuringPropertyAssignment(objectLiteralType: Type, property: ObjectLiteralElementLike, allProperties?: NodeArray, rightIsThis = false) { if (property.kind === SyntaxKind.PropertyAssignment || property.kind === SyntaxKind.ShorthandPropertyAssignment) { const name = property.name; - if (!isComputedNonLiteralName(name)) { - const text = getTextOfPropertyName(name); + const exprType = getLiteralTypeFromPropertyName(name); + if (isTypeUsableAsPropertyName(exprType)) { + const text = getPropertyNameFromType(exprType); const prop = getPropertyOfType(objectLiteralType, text); if (prop) { markPropertyAsReferenced(prop, property, rightIsThis); checkPropertyAccessibility(property, /*isSuper*/ false, objectLiteralType, prop); } } - const exprType = getLiteralTypeFromPropertyName(name); const elementType = getIndexedAccessType(objectLiteralType, exprType, name); const type = getFlowTypeOfDestructuring(property, elementType); return checkDestructuringAssignment(property.kind === SyntaxKind.ShorthandPropertyAssignment ? property : property.initializer, type); @@ -25532,12 +25529,15 @@ namespace ts { const parent = node.parent.parent; const parentType = getTypeForBindingElementParent(parent); const name = node.propertyName || node.name; - if (!isBindingPattern(name) && !isComputedNonLiteralName(name)) { - const nameText = getTextOfPropertyName(name); - const property = getPropertyOfType(parentType!, nameText); // TODO: GH#18217 - if (property) { - markPropertyAsReferenced(property, /*nodeForCheckWriteOnly*/ undefined, /*isThisAccess*/ false); // A destructuring is never a write-only reference. - checkPropertyAccessibility(parent, !!parent.initializer && parent.initializer.kind === SyntaxKind.SuperKeyword, parentType!, property); + if (!isBindingPattern(name) && parentType) { + const exprType = getLiteralTypeFromPropertyName(name); + if (isTypeUsableAsPropertyName(exprType)) { + const nameText = getPropertyNameFromType(exprType); + const property = getPropertyOfType(parentType, nameText); + if (property) { + markPropertyAsReferenced(property, /*nodeForCheckWriteOnly*/ undefined, /*isThisAccess*/ false); // A destructuring is never a write-only reference. + checkPropertyAccessibility(parent, !!parent.initializer && parent.initializer.kind === SyntaxKind.SuperKeyword, parentType!, property); + } } } } diff --git a/src/compiler/types.ts b/src/compiler/types.ts index 125c3297863..8b4be87d925 100644 --- a/src/compiler/types.ts +++ b/src/compiler/types.ts @@ -3952,6 +3952,7 @@ namespace ts { // Unique symbol types (TypeFlags.UniqueESSymbol) export interface UniqueESSymbolType extends Type { symbol: Symbol; + escapedName: __String; } export interface StringLiteralType extends LiteralType { diff --git a/tests/baselines/reference/api/tsserverlibrary.d.ts b/tests/baselines/reference/api/tsserverlibrary.d.ts index 91f492ddd1d..152ffe33a10 100644 --- a/tests/baselines/reference/api/tsserverlibrary.d.ts +++ b/tests/baselines/reference/api/tsserverlibrary.d.ts @@ -2214,6 +2214,7 @@ declare namespace ts { } interface UniqueESSymbolType extends Type { symbol: Symbol; + escapedName: __String; } interface StringLiteralType extends LiteralType { value: string; diff --git a/tests/baselines/reference/api/typescript.d.ts b/tests/baselines/reference/api/typescript.d.ts index 0e693f698f2..077bd9646d0 100644 --- a/tests/baselines/reference/api/typescript.d.ts +++ b/tests/baselines/reference/api/typescript.d.ts @@ -2214,6 +2214,7 @@ declare namespace ts { } interface UniqueESSymbolType extends Type { symbol: Symbol; + escapedName: __String; } interface StringLiteralType extends LiteralType { value: string; diff --git a/tests/baselines/reference/crashInGetTextOfComputedPropertyName.errors.txt b/tests/baselines/reference/crashInGetTextOfComputedPropertyName.errors.txt new file mode 100644 index 00000000000..4997400674c --- /dev/null +++ b/tests/baselines/reference/crashInGetTextOfComputedPropertyName.errors.txt @@ -0,0 +1,36 @@ +tests/cases/compiler/crashInGetTextOfComputedPropertyName.ts(23,24): error TS2525: Initializer provides no value for this binding element and the binding element has no default value. + + +==== tests/cases/compiler/crashInGetTextOfComputedPropertyName.ts (1 errors) ==== + // https://github.com/Microsoft/TypeScript/issues/29006 + export interface A { type: 'a' } + export interface B { type: 'b' } + export type AB = A | B + + const itemId = 'some-id' + + // --- test on first level --- + const items: { [id: string]: AB } = {} + const { [itemId]: itemOk1 } = items + typeof itemOk1 // pass + + // --- test on second level --- + interface ObjWithItems { + items: {[s: string]: AB} + } + const objWithItems: ObjWithItems = { items: {}} + + const itemOk2 = objWithItems.items[itemId] + typeof itemOk2 // pass + + const { + items: { [itemId]: itemWithTSError } = {} /*happens when default value is provided*/ + ~~~~~~~~~~~~~~~ +!!! error TS2525: Initializer provides no value for this binding element and the binding element has no default value. + } = objWithItems + + // in order to re-produce the error, uncomment next line: + typeof itemWithTSError // :( + + // will result in: + // Error from compilation: TypeError: Cannot read property 'charCodeAt' of undefined TypeError: Cannot read property 'charCodeAt' of undefined \ No newline at end of file diff --git a/tests/baselines/reference/crashInGetTextOfComputedPropertyName.types b/tests/baselines/reference/crashInGetTextOfComputedPropertyName.types index 7d9ce4aa34b..4eeb487bdfb 100644 --- a/tests/baselines/reference/crashInGetTextOfComputedPropertyName.types +++ b/tests/baselines/reference/crashInGetTextOfComputedPropertyName.types @@ -56,8 +56,8 @@ const { items: { [itemId]: itemWithTSError } = {} /*happens when default value is provided*/ >items : any >itemId : "some-id" ->itemWithTSError : AB ->{} : {} +>itemWithTSError : any +>{} : { some-id: any; } } = objWithItems >objWithItems : ObjWithItems @@ -65,7 +65,7 @@ const { // in order to re-produce the error, uncomment next line: typeof itemWithTSError // :( >typeof itemWithTSError : "string" | "number" | "bigint" | "boolean" | "symbol" | "undefined" | "object" | "function" ->itemWithTSError : AB +>itemWithTSError : any // will result in: // Error from compilation: TypeError: Cannot read property 'charCodeAt' of undefined TypeError: Cannot read property 'charCodeAt' of undefined diff --git a/tests/baselines/reference/destructureComputedProperty.errors.txt b/tests/baselines/reference/destructureComputedProperty.errors.txt index 5b39820988a..ad6e8042f87 100644 --- a/tests/baselines/reference/destructureComputedProperty.errors.txt +++ b/tests/baselines/reference/destructureComputedProperty.errors.txt @@ -1,9 +1,10 @@ tests/cases/compiler/destructureComputedProperty.ts(7,7): error TS2341: Property 'p' is private and only accessible within class 'C'. tests/cases/compiler/destructureComputedProperty.ts(8,7): error TS2341: Property 'p' is private and only accessible within class 'C'. +tests/cases/compiler/destructureComputedProperty.ts(9,7): error TS2341: Property 'p' is private and only accessible within class 'C'. tests/cases/compiler/destructureComputedProperty.ts(10,7): error TS2341: Property 'p' is private and only accessible within class 'C'. -==== tests/cases/compiler/destructureComputedProperty.ts (3 errors) ==== +==== tests/cases/compiler/destructureComputedProperty.ts (4 errors) ==== declare const ab: { n: number } | { n: string }; const nameN = "n"; const { [nameN]: n } = ab; @@ -17,6 +18,8 @@ tests/cases/compiler/destructureComputedProperty.ts(10,7): error TS2341: Propert ~~~~~~~~~~~~~ !!! error TS2341: Property 'p' is private and only accessible within class 'C'. const { [nameP]: p2 } = new C(); + ~~~~~~~~~~~~~~~ +!!! error TS2341: Property 'p' is private and only accessible within class 'C'. const { p: p3 } = new C(); ~~~~~~~~~ !!! error TS2341: Property 'p' is private and only accessible within class 'C'. diff --git a/tests/baselines/reference/destructuredLateBoundNameHasCorrectTypes.errors.txt b/tests/baselines/reference/destructuredLateBoundNameHasCorrectTypes.errors.txt index 100ce2d9a08..6d3d288af74 100644 --- a/tests/baselines/reference/destructuredLateBoundNameHasCorrectTypes.errors.txt +++ b/tests/baselines/reference/destructuredLateBoundNameHasCorrectTypes.errors.txt @@ -1,7 +1,8 @@ -tests/cases/compiler/destructuredLateBoundNameHasCorrectTypes.ts(11,8): error TS2339: Property 'prop2' does not exist on type '{ prop: string; }'. +tests/cases/compiler/destructuredLateBoundNameHasCorrectTypes.ts(11,21): error TS2525: Initializer provides no value for this binding element and the binding element has no default value. +tests/cases/compiler/destructuredLateBoundNameHasCorrectTypes.ts(11,37): error TS2353: Object literal may only specify known properties, and 'prop' does not exist in type '{ prop2: any; }'. -==== tests/cases/compiler/destructuredLateBoundNameHasCorrectTypes.ts (1 errors) ==== +==== tests/cases/compiler/destructuredLateBoundNameHasCorrectTypes.ts (2 errors) ==== let { [Symbol.iterator]: destructured } = []; void destructured; @@ -13,6 +14,8 @@ tests/cases/compiler/destructuredLateBoundNameHasCorrectTypes.ts(11,8): error TS const notPresent = "prop2"; let { [notPresent]: computed2 } = { prop: "b" }; - ~~~~~~~~~~ -!!! error TS2339: Property 'prop2' does not exist on type '{ prop: string; }'. + ~~~~~~~~~ +!!! error TS2525: Initializer provides no value for this binding element and the binding element has no default value. + ~~~~ +!!! error TS2353: Object literal may only specify known properties, and 'prop' does not exist in type '{ prop2: any; }'. \ No newline at end of file diff --git a/tests/baselines/reference/destructuredLateBoundNameHasCorrectTypes.types b/tests/baselines/reference/destructuredLateBoundNameHasCorrectTypes.types index 8d24b45e0ec..8342017958a 100644 --- a/tests/baselines/reference/destructuredLateBoundNameHasCorrectTypes.types +++ b/tests/baselines/reference/destructuredLateBoundNameHasCorrectTypes.types @@ -32,7 +32,7 @@ const notPresent = "prop2"; let { [notPresent]: computed2 } = { prop: "b" }; >notPresent : "prop2" >computed2 : any ->{ prop: "b" } : { prop: string; } +>{ prop: "b" } : { prop: string; prop2: any; } >prop : string >"b" : "b" diff --git a/tests/baselines/reference/destructuringAssignment_private.errors.txt b/tests/baselines/reference/destructuringAssignment_private.errors.txt index f17f1610d0a..2afd1606ebb 100644 --- a/tests/baselines/reference/destructuringAssignment_private.errors.txt +++ b/tests/baselines/reference/destructuringAssignment_private.errors.txt @@ -1,8 +1,10 @@ tests/cases/compiler/destructuringAssignment_private.ts(6,10): error TS2341: Property 'x' is private and only accessible within class 'C'. tests/cases/compiler/destructuringAssignment_private.ts(7,4): error TS2341: Property 'o' is private and only accessible within class 'C'. +tests/cases/compiler/destructuringAssignment_private.ts(10,10): error TS2341: Property 'x' is private and only accessible within class 'C'. +tests/cases/compiler/destructuringAssignment_private.ts(13,4): error TS2341: Property 'o' is private and only accessible within class 'C'. -==== tests/cases/compiler/destructuringAssignment_private.ts (2 errors) ==== +==== tests/cases/compiler/destructuringAssignment_private.ts (4 errors) ==== class C { private x = 0; private o = [{ a: 1 }]; @@ -14,4 +16,14 @@ tests/cases/compiler/destructuringAssignment_private.ts(7,4): error TS2341: Prop ({ o: [{ a: x }]} = new C()); ~ !!! error TS2341: Property 'o' is private and only accessible within class 'C'. + + const nameX = "x"; + ([{ a: { [nameX]: x } }] = [{ a: new C() }]); + ~~~~~~~ +!!! error TS2341: Property 'x' is private and only accessible within class 'C'. + + const nameO = "o"; + ({ [nameO]: [{ a: x }]} = new C()); + ~~~~~~~ +!!! error TS2341: Property 'o' is private and only accessible within class 'C'. \ No newline at end of file diff --git a/tests/baselines/reference/destructuringAssignment_private.js b/tests/baselines/reference/destructuringAssignment_private.js index 6201ad3578e..b8f4130761b 100644 --- a/tests/baselines/reference/destructuringAssignment_private.js +++ b/tests/baselines/reference/destructuringAssignment_private.js @@ -6,9 +6,16 @@ class C { let x: number; ([{ a: { x } }] = [{ a: new C() }]); ({ o: [{ a: x }]} = new C()); + +const nameX = "x"; +([{ a: { [nameX]: x } }] = [{ a: new C() }]); + +const nameO = "o"; +({ [nameO]: [{ a: x }]} = new C()); //// [destructuringAssignment_private.js] +var _a, _b; var C = /** @class */ (function () { function C() { this.x = 0; @@ -19,3 +26,7 @@ var C = /** @class */ (function () { var x; (x = [{ a: new C() }][0].a.x); (x = new C().o[0].a); +var nameX = "x"; +(_a = nameX, x = [{ a: new C() }][0].a[_a]); +var nameO = "o"; +(_b = nameO, x = new C()[_b][0].a); diff --git a/tests/baselines/reference/destructuringAssignment_private.symbols b/tests/baselines/reference/destructuringAssignment_private.symbols index b3a7abce5bf..be325bda639 100644 --- a/tests/baselines/reference/destructuringAssignment_private.symbols +++ b/tests/baselines/reference/destructuringAssignment_private.symbols @@ -24,3 +24,24 @@ let x: number; >x : Symbol(x, Decl(destructuringAssignment_private.ts, 4, 3)) >C : Symbol(C, Decl(destructuringAssignment_private.ts, 0, 0)) +const nameX = "x"; +>nameX : Symbol(nameX, Decl(destructuringAssignment_private.ts, 8, 5)) + +([{ a: { [nameX]: x } }] = [{ a: new C() }]); +>a : Symbol(a, Decl(destructuringAssignment_private.ts, 9, 3)) +>[nameX] : Symbol([nameX], Decl(destructuringAssignment_private.ts, 9, 8)) +>nameX : Symbol(nameX, Decl(destructuringAssignment_private.ts, 8, 5)) +>x : Symbol(x, Decl(destructuringAssignment_private.ts, 4, 3)) +>a : Symbol(a, Decl(destructuringAssignment_private.ts, 9, 29)) +>C : Symbol(C, Decl(destructuringAssignment_private.ts, 0, 0)) + +const nameO = "o"; +>nameO : Symbol(nameO, Decl(destructuringAssignment_private.ts, 11, 5)) + +({ [nameO]: [{ a: x }]} = new C()); +>[nameO] : Symbol([nameO], Decl(destructuringAssignment_private.ts, 12, 2)) +>nameO : Symbol(nameO, Decl(destructuringAssignment_private.ts, 11, 5)) +>a : Symbol(a, Decl(destructuringAssignment_private.ts, 12, 14)) +>x : Symbol(x, Decl(destructuringAssignment_private.ts, 4, 3)) +>C : Symbol(C, Decl(destructuringAssignment_private.ts, 0, 0)) + diff --git a/tests/baselines/reference/destructuringAssignment_private.types b/tests/baselines/reference/destructuringAssignment_private.types index f126a973f1d..0615429cef5 100644 --- a/tests/baselines/reference/destructuringAssignment_private.types +++ b/tests/baselines/reference/destructuringAssignment_private.types @@ -42,3 +42,40 @@ let x: number; >new C() : C >C : typeof C +const nameX = "x"; +>nameX : "x" +>"x" : "x" + +([{ a: { [nameX]: x } }] = [{ a: new C() }]); +>([{ a: { [nameX]: x } }] = [{ a: new C() }]) : [{ a: C; }] +>[{ a: { [nameX]: x } }] = [{ a: new C() }] : [{ a: C; }] +>[{ a: { [nameX]: x } }] : [{ a: { [nameX]: number; }; }] +>{ a: { [nameX]: x } } : { a: { [nameX]: number; }; } +>a : { [nameX]: number; } +>{ [nameX]: x } : { [nameX]: number; } +>[nameX] : number +>nameX : "x" +>x : number +>[{ a: new C() }] : [{ a: C; }] +>{ a: new C() } : { a: C; } +>a : C +>new C() : C +>C : typeof C + +const nameO = "o"; +>nameO : "o" +>"o" : "o" + +({ [nameO]: [{ a: x }]} = new C()); +>({ [nameO]: [{ a: x }]} = new C()) : C +>{ [nameO]: [{ a: x }]} = new C() : C +>{ [nameO]: [{ a: x }]} : { [nameO]: [{ a: number; }]; } +>[nameO] : [{ a: number; }] +>nameO : "o" +>[{ a: x }] : [{ a: number; }] +>{ a: x } : { a: number; } +>a : number +>x : number +>new C() : C +>C : typeof C + diff --git a/tests/cases/compiler/destructuringAssignment_private.ts b/tests/cases/compiler/destructuringAssignment_private.ts index bdc057851ae..62f4101838d 100644 --- a/tests/cases/compiler/destructuringAssignment_private.ts +++ b/tests/cases/compiler/destructuringAssignment_private.ts @@ -5,3 +5,9 @@ class C { let x: number; ([{ a: { x } }] = [{ a: new C() }]); ({ o: [{ a: x }]} = new C()); + +const nameX = "x"; +([{ a: { [nameX]: x } }] = [{ a: new C() }]); + +const nameO = "o"; +({ [nameO]: [{ a: x }]} = new C()); From f0227ecb2cc07623efeec08258637169fba847f2 Mon Sep 17 00:00:00 2001 From: Sheetal Nandi Date: Tue, 15 Jan 2019 12:34:36 -0800 Subject: [PATCH 21/49] Handle find all references for symbol merged with UMD module and global var Fixes #29093 --- src/harness/fourslash.ts | 4 +- src/services/findAllReferences.ts | 127 +++++++++++++++--- ...findAllReferencesUmdModuleAsGlobalConst.ts | 43 ++++++ 3 files changed, 153 insertions(+), 21 deletions(-) create mode 100644 tests/cases/fourslash/findAllReferencesUmdModuleAsGlobalConst.ts diff --git a/src/harness/fourslash.ts b/src/harness/fourslash.ts index 2b04b4bd8cd..b0bb35d5db3 100644 --- a/src/harness/fourslash.ts +++ b/src/harness/fourslash.ts @@ -939,8 +939,8 @@ namespace FourSlash { const startFile = this.activeFile.fileName; for (const fileName of files) { const searchFileNames = startFile === fileName ? [startFile] : [startFile, fileName]; - const highlights = this.getDocumentHighlightsAtCurrentPosition(searchFileNames)!; - if (!highlights.every(dh => ts.contains(searchFileNames, dh.fileName))) { + const highlights = this.getDocumentHighlightsAtCurrentPosition(searchFileNames); + if (highlights && !highlights.every(dh => ts.contains(searchFileNames, dh.fileName))) { this.raiseError(`When asking for document highlights only in files ${searchFileNames}, got document highlights in ${unique(highlights, dh => dh.fileName)}`); } } diff --git a/src/services/findAllReferences.ts b/src/services/findAllReferences.ts index 54202322260..b3c62c2085c 100644 --- a/src/services/findAllReferences.ts +++ b/src/services/findAllReferences.ts @@ -111,7 +111,7 @@ namespace ts.FindAllReferences { return flattenEntries(Core.getReferencedSymbolsForNode(position, node, program, sourceFiles, cancellationToken, options, sourceFilesSet)); } - function flattenEntries(referenceSymbols: SymbolAndEntries[] | undefined): ReadonlyArray | undefined { + function flattenEntries(referenceSymbols: ReadonlyArray | undefined): ReadonlyArray | undefined { return referenceSymbols && flatMap(referenceSymbols, r => r.references); } @@ -282,6 +282,11 @@ namespace ts.FindAllReferences { return createTextSpanFromBounds(start, end); } + export function getTextSpanOfEntry(entry: Entry) { + return entry.kind === EntryKind.Span ? entry.textSpan : + getTextSpan(entry.node, entry.node.getSourceFile()); + } + /** A node is considered a writeAccess iff it is a name of a declaration or a target of an assignment */ function isWriteAccessForReference(node: Node): boolean { const decl = getDeclarationFromName(node); @@ -353,7 +358,7 @@ namespace ts.FindAllReferences { /* @internal */ namespace ts.FindAllReferences.Core { /** Core find-all-references algorithm. Handles special cases before delegating to `getReferencedSymbolsForSymbol`. */ - export function getReferencedSymbolsForNode(position: number, node: Node, program: Program, sourceFiles: ReadonlyArray, cancellationToken: CancellationToken, options: Options = {}, sourceFilesSet: ReadonlyMap = arrayToSet(sourceFiles, f => f.fileName)): SymbolAndEntries[] | undefined { + export function getReferencedSymbolsForNode(position: number, node: Node, program: Program, sourceFiles: ReadonlyArray, cancellationToken: CancellationToken, options: Options = {}, sourceFilesSet: ReadonlyMap = arrayToSet(sourceFiles, f => f.fileName)): ReadonlyArray | undefined { if (isSourceFile(node)) { const reference = GoToDefinition.getReferenceAtPosition(node, position, program); const moduleSymbol = reference && program.getTypeChecker().getMergedSymbol(reference.file.symbol); @@ -368,7 +373,7 @@ namespace ts.FindAllReferences.Core { } const checker = program.getTypeChecker(); - let symbol = checker.getSymbolAtLocation(node); + const symbol = checker.getSymbolAtLocation(node); // Could not find a symbol e.g. unknown identifier if (!symbol) { @@ -380,23 +385,92 @@ namespace ts.FindAllReferences.Core { return getReferencedSymbolsForModule(program, symbol.parent!, /*excludeImportTypeOfExportEquals*/ false, sourceFiles, sourceFilesSet); } - let moduleReferences: SymbolAndEntries[] = emptyArray; - const moduleSourceFile = isModuleSymbol(symbol); - let referencedNode: Node | undefined = node; - if (moduleSourceFile) { - const exportEquals = symbol.exports!.get(InternalSymbolName.ExportEquals); - // If !!exportEquals, we're about to add references to `import("mod")` anyway, so don't double-count them. - moduleReferences = getReferencedSymbolsForModule(program, symbol, !!exportEquals, sourceFiles, sourceFilesSet); - if (!exportEquals || !sourceFilesSet.has(moduleSourceFile.fileName)) return moduleReferences; - // Continue to get references to 'export ='. - symbol = skipAlias(exportEquals, checker); - referencedNode = undefined; + const moduleReferences = getReferencedSymbolsForModuleIfDeclaredBySourceFile(symbol, program, sourceFiles, cancellationToken, options, sourceFilesSet); + if (moduleReferences && !(symbol.flags & SymbolFlags.Transient)) { + return moduleReferences; } - return concatenate(moduleReferences, getReferencedSymbolsForSymbol(symbol, referencedNode, sourceFiles, sourceFilesSet, checker, cancellationToken, options)); + + const aliasedSymbol = getMergedAliasedSymbolOfNamespaceExportDeclaration(node, symbol, checker); + const moduleReferencesOfExportTarget = aliasedSymbol && + getReferencedSymbolsForModuleIfDeclaredBySourceFile(aliasedSymbol, program, sourceFiles, cancellationToken, options, sourceFilesSet); + + const references = getReferencedSymbolsForSymbol(symbol, node, sourceFiles, sourceFilesSet, checker, cancellationToken, options); + return mergeReferences(program, moduleReferences, references, moduleReferencesOfExportTarget); } - function isModuleSymbol(symbol: Symbol): SourceFile | undefined { - return symbol.flags & SymbolFlags.Module ? find(symbol.declarations, isSourceFile) : undefined; + function getMergedAliasedSymbolOfNamespaceExportDeclaration(node: Node, symbol: Symbol, checker: TypeChecker) { + if (node.parent && isNamespaceExportDeclaration(node.parent)) { + const aliasedSymbol = checker.getAliasedSymbol(symbol); + const targetSymbol = checker.getMergedSymbol(aliasedSymbol); + if (aliasedSymbol !== targetSymbol) { + return targetSymbol; + } + } + return undefined; + } + + function getReferencedSymbolsForModuleIfDeclaredBySourceFile(symbol: Symbol, program: Program, sourceFiles: ReadonlyArray, cancellationToken: CancellationToken, options: Options, sourceFilesSet: ReadonlyMap) { + const moduleSourceFile = symbol.flags & SymbolFlags.Module ? find(symbol.declarations, isSourceFile) : undefined; + if (!moduleSourceFile) return undefined; + const exportEquals = symbol.exports!.get(InternalSymbolName.ExportEquals); + // If !!exportEquals, we're about to add references to `import("mod")` anyway, so don't double-count them. + const moduleReferences = getReferencedSymbolsForModule(program, symbol, !!exportEquals, sourceFiles, sourceFilesSet); + if (!exportEquals || !sourceFilesSet.has(moduleSourceFile.fileName)) return moduleReferences; + // Continue to get references to 'export ='. + const checker = program.getTypeChecker(); + symbol = skipAlias(exportEquals, checker); + return mergeReferences(program, moduleReferences, getReferencedSymbolsForSymbol(symbol, /*node*/ undefined, sourceFiles, sourceFilesSet, checker, cancellationToken, options)); + } + + function mergeReferences(program: Program, ...referencesToMerge: (SymbolAndEntries[] | undefined)[]): SymbolAndEntries[] | undefined { + let result: SymbolAndEntries[] | undefined; + for (const references of referencesToMerge) { + if (!references || !references.length) continue; + if (!result) { + result = references; + continue; + } + for (const entry of references) { + if (!entry.definition || entry.definition.type !== DefinitionKind.Symbol) { + result.push(entry); + continue; + } + const symbol = entry.definition.symbol; + const refIndex = findIndex(result, ref => !!ref.definition && + ref.definition.type === DefinitionKind.Symbol && + ref.definition.symbol === symbol); + if (refIndex === -1) { + result.push(entry); + continue; + } + + const reference = result[refIndex]; + result[refIndex] = { + definition: reference.definition, + references: reference.references.concat(entry.references).sort((entry1, entry2) => { + const entry1File = getSourceFileIndexOfEntry(program, entry1); + const entry2File = getSourceFileIndexOfEntry(program, entry2); + if (entry1File !== entry2File) { + return compareValues(entry1File, entry2File); + } + + const entry1Span = getTextSpanOfEntry(entry1); + const entry2Span = getTextSpanOfEntry(entry2); + return entry1Span.start !== entry2Span.start ? + compareValues(entry1Span.start, entry2Span.start) : + compareValues(entry1Span.length, entry2Span.length); + }) + }; + } + } + return result; + } + + function getSourceFileIndexOfEntry(program: Program, entry: Entry) { + const sourceFile = entry.kind === EntryKind.Span ? + program.getSourceFile(entry.fileName)! : + entry.node.getSourceFile(); + return program.getSourceFiles().indexOf(sourceFile); } function getReferencedSymbolsForModule(program: Program, symbol: Symbol, excludeImportTypeOfExportEquals: boolean, sourceFiles: ReadonlyArray, sourceFilesSet: ReadonlyMap): SymbolAndEntries[] { @@ -435,7 +509,7 @@ namespace ts.FindAllReferences.Core { break; default: // This may be merged with something. - Debug.fail("Expected a module symbol to be declared by a SourceFile or ModuleDeclaration."); + Debug.assert(!!(symbol.flags & SymbolFlags.Transient), "Expected a module symbol to be declared by a SourceFile or ModuleDeclaration."); } } @@ -551,6 +625,8 @@ namespace ts.FindAllReferences.Core { // If the symbol is declared as part of a declaration like `{ type: "a" } | { type: "b" }`, use the property on the union type to get more references. return firstDefined(symbol.declarations, decl => { if (!decl.parent) { + // Ignore UMD module and global merge + if (symbol.flags & SymbolFlags.Transient) return undefined; // Assertions for GH#21814. We should be handling SourceFile symbols in `getReferencedSymbolsForModule` instead of getting here. Debug.fail(`Unexpected symbol at ${Debug.showSyntaxKind(node)}: ${Debug.showSymbol(symbol)}`); } @@ -588,6 +664,12 @@ namespace ts.FindAllReferences.Core { Class, } + function getNonModuleSymbolOfMergedModuleSymbol(symbol: Symbol) { + if (!(symbol.flags & (SymbolFlags.Module | SymbolFlags.Transient))) return undefined; + const decl = symbol.declarations && find(symbol.declarations, d => !isSourceFile(d) && !isModuleDeclaration(d)); + return decl && decl.symbol; + } + /** * Holds all state needed for the finding references. * Unlike `Search`, there is only one `State`. @@ -648,7 +730,7 @@ namespace ts.FindAllReferences.Core { // The other two forms seem to be handled downstream (e.g. in `skipPastExportOrImportSpecifier`), so special-casing the first form // here appears to be intentional). const { - text = stripQuotes(unescapeLeadingUnderscores((getLocalSymbolForExportDefault(symbol) || symbol).escapedName)), + text = stripQuotes(unescapeLeadingUnderscores((getLocalSymbolForExportDefault(symbol) || getNonModuleSymbolOfMergedModuleSymbol(symbol) || symbol).escapedName)), allSearchSymbols = [symbol], } = searchOptions; const escapedText = escapeLeadingUnderscores(text); @@ -1573,6 +1655,13 @@ namespace ts.FindAllReferences.Core { if (res2) return res2; } + const aliasedSymbol = getMergedAliasedSymbolOfNamespaceExportDeclaration(location, symbol, checker); + if (aliasedSymbol) { + // In case of UMD module and global merging, search for global as well + const res = cbSymbol(aliasedSymbol, /*rootSymbol*/ undefined, /*baseSymbol*/ undefined, EntryKind.Node); + if (res) return res; + } + const res = fromRoot(symbol); if (res) return res; diff --git a/tests/cases/fourslash/findAllReferencesUmdModuleAsGlobalConst.ts b/tests/cases/fourslash/findAllReferencesUmdModuleAsGlobalConst.ts new file mode 100644 index 00000000000..0964188f939 --- /dev/null +++ b/tests/cases/fourslash/findAllReferencesUmdModuleAsGlobalConst.ts @@ -0,0 +1,43 @@ +/// + +// @Filename: /node_modules/@types/three/three-core.d.ts +////export class Vector3 { +//// constructor(x?: number, y?: number, z?: number); +//// x: number; +//// y: number; +////} + +// @Filename: /node_modules/@types/three/index.d.ts +////export * from "./three-core"; +////export as namespace [|{| "isWriteAccess": true, "isDefinition": true |}THREE|]; + +// @Filename: /typings/global.d.ts +////import * as _THREE from '[|three|]'; +////declare global { +//// const [|{| "isWriteAccess": true, "isDefinition": true |}THREE|]: typeof _THREE; +////} + +// @Filename: /src/index.ts +////export const a = {}; +////let v = new [|THREE|].Vector2(); + +// @Filename: /tsconfig.json +////{ +//// "compilerOptions": { +//// "esModuleInterop": true, +//// "outDir": "./build/js/", +//// "noImplicitAny": true, +//// "module": "es6", +//// "target": "es6", +//// "allowJs": true, +//// "skipLibCheck": true, +//// "lib": ["es2016", "dom"], +//// "typeRoots": ["node_modules/@types/"], +//// "types": ["three"] +//// }, +//// "files": ["/src/index.ts", "typings/global.d.ts"] +////} + +// TODO:: this should be var THREE: typeof import instead of module name as var but thats existing issue and repros with quickInfo too. +verify.singleReferenceGroup(`module "/node_modules/@types/three/index" +var "/node_modules/@types/three/index": typeof import("/node_modules/@types/three/index")`); \ No newline at end of file From 76b78a4df5058708bf47ce33c57d0721ef6ce46e Mon Sep 17 00:00:00 2001 From: Ron Buckton Date: Tue, 22 Jan 2019 15:02:30 -0800 Subject: [PATCH 22/49] Fix crash in signatureHelp --- src/services/signatureHelp.ts | 2 +- src/tsserver/server.ts | 4 ++++ tests/cases/fourslash/signatureHelpAtEOF2.ts | 6 ++++++ 3 files changed, 11 insertions(+), 1 deletion(-) create mode 100644 tests/cases/fourslash/signatureHelpAtEOF2.ts diff --git a/src/services/signatureHelp.ts b/src/services/signatureHelp.ts index d63e16ce801..27ed0b6dc24 100644 --- a/src/services/signatureHelp.ts +++ b/src/services/signatureHelp.ts @@ -452,7 +452,7 @@ namespace ts.SignatureHelp { } function getContainingArgumentInfo(node: Node, position: number, sourceFile: SourceFile, checker: TypeChecker, isManuallyInvoked: boolean): ArgumentListInfo | undefined { - for (let n = node; isManuallyInvoked || (!isBlock(n) && !isSourceFile(n)); n = n.parent) { + for (let n = node; !isSourceFile(n) && (isManuallyInvoked || !isBlock(n)); n = n.parent) { // If the node is not a subspan of its parent, this is a big problem. // There have been crashes that might be caused by this violation. Debug.assert(rangeContainsRange(n.parent, n), "Not a subspan", () => `Child: ${Debug.showSyntaxKind(n)}, parent: ${Debug.showSyntaxKind(n.parent)}`); diff --git a/src/tsserver/server.ts b/src/tsserver/server.ts index e5820260d5f..ccc681cd96e 100644 --- a/src/tsserver/server.ts +++ b/src/tsserver/server.ts @@ -967,4 +967,8 @@ namespace ts.server { (process as any).noAsar = true; // Start listening ioSession.listen(); + + if (ts.sys.tryEnableSourceMapsForHost && /^development$/i.test(ts.sys.getEnvironmentVariable("NODE_ENV"))) { + ts.sys.tryEnableSourceMapsForHost(); + } } diff --git a/tests/cases/fourslash/signatureHelpAtEOF2.ts b/tests/cases/fourslash/signatureHelpAtEOF2.ts new file mode 100644 index 00000000000..676ad2d0db6 --- /dev/null +++ b/tests/cases/fourslash/signatureHelpAtEOF2.ts @@ -0,0 +1,6 @@ +/// + +////console.log() +/////**/ + +verify.noSignatureHelpForTriggerReason({ kind: "invoked" }, ""); From 60487dc7cb2f2d3425e686f9d934b1e2bbbfc04e Mon Sep 17 00:00:00 2001 From: Ron Buckton Date: Tue, 22 Jan 2019 15:25:14 -0800 Subject: [PATCH 23/49] Enable debug info by default when debugging the language server --- src/tsserver/server.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/tsserver/server.ts b/src/tsserver/server.ts index ccc681cd96e..21146958748 100644 --- a/src/tsserver/server.ts +++ b/src/tsserver/server.ts @@ -968,6 +968,10 @@ namespace ts.server { // Start listening ioSession.listen(); + if (Debug.isDebugging) { + Debug.enableDebugInfo(); + } + if (ts.sys.tryEnableSourceMapsForHost && /^development$/i.test(ts.sys.getEnvironmentVariable("NODE_ENV"))) { ts.sys.tryEnableSourceMapsForHost(); } From e1477b41b7b82bb456fb94f878fba44233f213d1 Mon Sep 17 00:00:00 2001 From: Ron Buckton Date: Tue, 22 Jan 2019 16:28:00 -0800 Subject: [PATCH 24/49] Fix lint error --- src/compiler/checker.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index d38111efa1e..d0d9a2b0766 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -25536,7 +25536,7 @@ namespace ts { const property = getPropertyOfType(parentType, nameText); if (property) { markPropertyAsReferenced(property, /*nodeForCheckWriteOnly*/ undefined, /*isThisAccess*/ false); // A destructuring is never a write-only reference. - checkPropertyAccessibility(parent, !!parent.initializer && parent.initializer.kind === SyntaxKind.SuperKeyword, parentType!, property); + checkPropertyAccessibility(parent, !!parent.initializer && parent.initializer.kind === SyntaxKind.SuperKeyword, parentType, property); } } } From d42185373aed23049f2efb64843c13c74e92ab9e Mon Sep 17 00:00:00 2001 From: Sheetal Nandi Date: Wed, 23 Jan 2019 10:45:20 -0800 Subject: [PATCH 25/49] PR feedback --- src/services/findAllReferences.ts | 3 +++ .../cases/fourslash/findAllReferencesUmdModuleAsGlobalConst.ts | 1 + 2 files changed, 4 insertions(+) diff --git a/src/services/findAllReferences.ts b/src/services/findAllReferences.ts index b3c62c2085c..52f3277574e 100644 --- a/src/services/findAllReferences.ts +++ b/src/services/findAllReferences.ts @@ -422,6 +422,9 @@ namespace ts.FindAllReferences.Core { return mergeReferences(program, moduleReferences, getReferencedSymbolsForSymbol(symbol, /*node*/ undefined, sourceFiles, sourceFilesSet, checker, cancellationToken, options)); } + /** + * Merges the references by sorting them (by file index in sourceFiles and their location in it) that point to same definition symbol + */ function mergeReferences(program: Program, ...referencesToMerge: (SymbolAndEntries[] | undefined)[]): SymbolAndEntries[] | undefined { let result: SymbolAndEntries[] | undefined; for (const references of referencesToMerge) { diff --git a/tests/cases/fourslash/findAllReferencesUmdModuleAsGlobalConst.ts b/tests/cases/fourslash/findAllReferencesUmdModuleAsGlobalConst.ts index 0964188f939..464dcef1548 100644 --- a/tests/cases/fourslash/findAllReferencesUmdModuleAsGlobalConst.ts +++ b/tests/cases/fourslash/findAllReferencesUmdModuleAsGlobalConst.ts @@ -38,6 +38,7 @@ //// "files": ["/src/index.ts", "typings/global.d.ts"] ////} +// GH#29533 // TODO:: this should be var THREE: typeof import instead of module name as var but thats existing issue and repros with quickInfo too. verify.singleReferenceGroup(`module "/node_modules/@types/three/index" var "/node_modules/@types/three/index": typeof import("/node_modules/@types/three/index")`); \ No newline at end of file From 41568ba7c6ddaf492ba9b927cb6f206fd8a59d59 Mon Sep 17 00:00:00 2001 From: Chris Patterson Date: Wed, 23 Jan 2019 14:16:23 -0500 Subject: [PATCH 26/49] Updating badge url Updating the badge url to use the new url format. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index a7222668ada..57c2a54385d 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ [![Build Status](https://travis-ci.org/Microsoft/TypeScript.svg?branch=master)](https://travis-ci.org/Microsoft/TypeScript) -[![VSTS Build Status](https://typescript.visualstudio.com/_apis/public/build/definitions/cf7ac146-d525-443c-b23c-0d58337efebc/4/badge)](https://typescript.visualstudio.com/TypeScript/_build/latest?definitionId=4&view=logs) +[![VSTS Build Status](https://dev.azure.com/typescript/TypeScript/_apis/build/status/Typescript/node10)](https://https://dev.azure.com/typescript/TypeScript/_build/latest?definitionId=4&view=logs) [![npm version](https://badge.fury.io/js/typescript.svg)](https://www.npmjs.com/package/typescript) [![Downloads](https://img.shields.io/npm/dm/typescript.svg)](https://www.npmjs.com/package/typescript) From d7601b755f7f988c75aee371f4319dc8bdf337ef Mon Sep 17 00:00:00 2001 From: xiaofa Date: Thu, 24 Jan 2019 18:16:34 +0800 Subject: [PATCH 27/49] fix trailing comma should not allowed in dynamic import argument --- src/compiler/checker.ts | 2 +- .../reference/dynamicImportTrailingComma.errors.txt | 8 ++++++++ tests/baselines/reference/dynamicImportTrailingComma.js | 7 +++++++ .../reference/dynamicImportTrailingComma.symbols | 7 +++++++ .../baselines/reference/dynamicImportTrailingComma.types | 9 +++++++++ tests/cases/compiler/dynamicImportTrailingComma.ts | 4 ++++ 6 files changed, 36 insertions(+), 1 deletion(-) create mode 100644 tests/baselines/reference/dynamicImportTrailingComma.errors.txt create mode 100644 tests/baselines/reference/dynamicImportTrailingComma.js create mode 100644 tests/baselines/reference/dynamicImportTrailingComma.symbols create mode 100644 tests/baselines/reference/dynamicImportTrailingComma.types create mode 100644 tests/cases/compiler/dynamicImportTrailingComma.ts diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index ac069d95fac..3a6d58db31c 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -31178,7 +31178,7 @@ namespace ts { if (nodeArguments.length !== 1) { return grammarErrorOnNode(node, Diagnostics.Dynamic_import_must_have_one_specifier_as_an_argument); } - + checkGrammarForDisallowedTrailingComma(nodeArguments); // see: parseArgumentOrArrayLiteralElement...we use this function which parse arguments of callExpression to parse specifier for dynamic import. // parseArgumentOrArrayLiteralElement allows spread element to be in an argument list which is not allowed as specifier in dynamic import. if (isSpreadElement(nodeArguments[0])) { diff --git a/tests/baselines/reference/dynamicImportTrailingComma.errors.txt b/tests/baselines/reference/dynamicImportTrailingComma.errors.txt new file mode 100644 index 00000000000..fbae6f2c6ba --- /dev/null +++ b/tests/baselines/reference/dynamicImportTrailingComma.errors.txt @@ -0,0 +1,8 @@ +tests/cases/compiler/dynamicImportTrailingComma.ts(2,12): error TS1009: Trailing comma not allowed. + + +==== tests/cases/compiler/dynamicImportTrailingComma.ts (1 errors) ==== + const path = './foo'; + import(path,); + ~ +!!! error TS1009: Trailing comma not allowed. \ No newline at end of file diff --git a/tests/baselines/reference/dynamicImportTrailingComma.js b/tests/baselines/reference/dynamicImportTrailingComma.js new file mode 100644 index 00000000000..bbbc9794af7 --- /dev/null +++ b/tests/baselines/reference/dynamicImportTrailingComma.js @@ -0,0 +1,7 @@ +//// [dynamicImportTrailingComma.ts] +const path = './foo'; +import(path,); + +//// [dynamicImportTrailingComma.js] +var path = './foo'; +Promise.resolve().then(function () { return require(path); }); diff --git a/tests/baselines/reference/dynamicImportTrailingComma.symbols b/tests/baselines/reference/dynamicImportTrailingComma.symbols new file mode 100644 index 00000000000..082c026613a --- /dev/null +++ b/tests/baselines/reference/dynamicImportTrailingComma.symbols @@ -0,0 +1,7 @@ +=== tests/cases/compiler/dynamicImportTrailingComma.ts === +const path = './foo'; +>path : Symbol(path, Decl(dynamicImportTrailingComma.ts, 0, 5)) + +import(path,); +>path : Symbol(path, Decl(dynamicImportTrailingComma.ts, 0, 5)) + diff --git a/tests/baselines/reference/dynamicImportTrailingComma.types b/tests/baselines/reference/dynamicImportTrailingComma.types new file mode 100644 index 00000000000..bb6c3966619 --- /dev/null +++ b/tests/baselines/reference/dynamicImportTrailingComma.types @@ -0,0 +1,9 @@ +=== tests/cases/compiler/dynamicImportTrailingComma.ts === +const path = './foo'; +>path : "./foo" +>'./foo' : "./foo" + +import(path,); +>import(path,) : Promise +>path : "./foo" + diff --git a/tests/cases/compiler/dynamicImportTrailingComma.ts b/tests/cases/compiler/dynamicImportTrailingComma.ts new file mode 100644 index 00000000000..de6aa6010b5 --- /dev/null +++ b/tests/cases/compiler/dynamicImportTrailingComma.ts @@ -0,0 +1,4 @@ +// @skipLibCheck: true +// @lib: es6 +const path = './foo'; +import(path,); \ No newline at end of file From 331b9bcfde86453d0e3d68126fc5c9fc46160591 Mon Sep 17 00:00:00 2001 From: Pete Bacon Darwin Date: Thu, 24 Jan 2019 10:20:17 +0000 Subject: [PATCH 28/49] Use the correct source when skipping trivia A custom `SourceMapSource` can optionally provide its own `skipTrivia` function. If this is not provided then the compiler will use the default function designed for TypeScript source files. Previously, when calling this default function we were passing the current `sourceMapSource` rather than the specified `source` whose trivia needs to be skipped. This resulted in the `pos` being incorrectly calculated for external source files that need mapping. **Side note:** There are actually two possible constructors available for creating `SourceMapSource` objects. One of them defaults to an identity function for the `skipTrivia` function if it is not provided (see https://github.com/Microsoft/TypeScript/blob/49689894d747714d6b2b8461b9033020efec9625/src/compiler/utilities.ts#L6972-L6976) and the other one leaves the `skipTrivia` field `undefined` (see https://github.com/Microsoft/TypeScript/blob/5fc8f1dd801dbacfe7e2d624f80b7a6a3868d180/src/services/services.ts#L776-L797) Unfortunately, it appears that the second of these two constructors is the one available when importing the "typescript" module in node.js code. --- src/compiler/emitter.ts | 4 +-- src/testRunner/unittests/customTransforms.ts | 29 +++++++++++++++++++ .../skipTriviaExternalSourceFiles.js | 6 ++++ 3 files changed, 37 insertions(+), 2 deletions(-) create mode 100644 tests/baselines/reference/customTransforms/skipTriviaExternalSourceFiles.js diff --git a/src/compiler/emitter.ts b/src/compiler/emitter.ts index 395f6448890..afc2a025da5 100644 --- a/src/compiler/emitter.ts +++ b/src/compiler/emitter.ts @@ -4372,10 +4372,10 @@ namespace ts { } /** - * Skips trivia such as comments and white-space that can optionally overriden by the source map source + * Skips trivia such as comments and white-space that can be optionally overridden by the source-map source */ function skipSourceTrivia(source: SourceMapSource, pos: number): number { - return source.skipTrivia ? source.skipTrivia(pos) : skipTrivia(sourceMapSource.text, pos); + return source.skipTrivia ? source.skipTrivia(pos) : skipTrivia(source.text, pos); } /** diff --git a/src/testRunner/unittests/customTransforms.ts b/src/testRunner/unittests/customTransforms.ts index aef9ed745ec..0ac14341342 100644 --- a/src/testRunner/unittests/customTransforms.ts +++ b/src/testRunner/unittests/customTransforms.ts @@ -129,5 +129,34 @@ namespace ts { }, { sourceMap: true } ); + + emitsCorrectly("skipTriviaExternalSourceFiles", + [ + { + file: "source.ts", + // The source file contains preceding trivia (e.g. whitespace) to try to confuse the `skipSourceTrivia` function. + text: " original;" + }, + ], + { + before: [ + context => node => visitNode(node, function visitor(node: Node): Node { + if (isIdentifier(node) && node.text === "original") { + const newNode = createIdentifier("changed"); + setSourceMapRange(newNode, { + pos: 0, + end: 7, + // Do not provide a custom skipTrivia function for `source`. + source: createSourceMapSource("another.html", "changed;") + }); + return newNode; + } + return visitEachChild(node, visitor, context); + }) + ] + }, + { sourceMap: true } + ); + }); } diff --git a/tests/baselines/reference/customTransforms/skipTriviaExternalSourceFiles.js b/tests/baselines/reference/customTransforms/skipTriviaExternalSourceFiles.js new file mode 100644 index 00000000000..8c7fecf97f0 --- /dev/null +++ b/tests/baselines/reference/customTransforms/skipTriviaExternalSourceFiles.js @@ -0,0 +1,6 @@ +// [source.js.map] +{"version":3,"file":"source.js","sourceRoot":"","sources":["source.ts","another.html"],"names":[],"mappings":"ACAA,OAAO,CDAW"} + +// [source.js] +changed; +//# sourceMappingURL=source.js.map \ No newline at end of file From 387201cda07a791c6df6b9768f455d49553886cd Mon Sep 17 00:00:00 2001 From: TypeScript Bot Date: Thu, 24 Jan 2019 09:27:32 -0800 Subject: [PATCH 29/49] Update user baselines (#29560) --- tests/baselines/reference/user/antd.log | 13 + tests/baselines/reference/user/bluebird.log | 1 + .../user/chrome-devtools-frontend.log | 361 +++++++----------- tests/baselines/reference/user/lodash.log | 1 - 4 files changed, 153 insertions(+), 223 deletions(-) create mode 100644 tests/baselines/reference/user/antd.log diff --git a/tests/baselines/reference/user/antd.log b/tests/baselines/reference/user/antd.log new file mode 100644 index 00000000000..48db08868d6 --- /dev/null +++ b/tests/baselines/reference/user/antd.log @@ -0,0 +1,13 @@ +Exit Code: 1 +Standard output: +node_modules/antd/lib/tree-select/interface.d.ts(26,18): error TS2430: Interface 'TreeSelectProps' incorrectly extends interface 'AbstractSelectProps'. + Types of property 'getPopupContainer' are incompatible. + Type '((triggerNode: Element) => HTMLElement) | undefined' is not assignable to type '((triggerNode?: Element | undefined) => HTMLElement) | undefined'. + Type '(triggerNode: Element) => HTMLElement' is not assignable to type '(triggerNode?: Element | undefined) => HTMLElement'. + Types of parameters 'triggerNode' and 'triggerNode' are incompatible. + Type 'Element | undefined' is not assignable to type 'Element'. + Type 'undefined' is not assignable to type 'Element'. + + + +Standard error: diff --git a/tests/baselines/reference/user/bluebird.log b/tests/baselines/reference/user/bluebird.log index a9ad6492545..b4b251e188c 100644 --- a/tests/baselines/reference/user/bluebird.log +++ b/tests/baselines/reference/user/bluebird.log @@ -161,6 +161,7 @@ node_modules/bluebird/js/release/some.js(133,23): error TS2339: Property 'promis node_modules/bluebird/js/release/using.js(78,20): error TS2339: Property 'doDispose' does not exist on type 'Disposer'. node_modules/bluebird/js/release/using.js(97,23): error TS2339: Property 'data' does not exist on type 'FunctionDisposer'. node_modules/bluebird/js/release/using.js(223,15): error TS2350: Only a void function can be called with the 'new' keyword. +node_modules/bluebird/js/release/util.js(200,32): error TS2339: Property 'foo' does not exist on type 'FakeConstructor'. node_modules/bluebird/js/release/util.js(279,45): error TS2345: Argument of type 'PropertyDescriptor | { value: any; } | undefined' is not assignable to parameter of type 'PropertyDescriptor & ThisType'. Type 'undefined' is not assignable to type 'PropertyDescriptor & ThisType'. Type 'undefined' is not assignable to type 'PropertyDescriptor'. diff --git a/tests/baselines/reference/user/chrome-devtools-frontend.log b/tests/baselines/reference/user/chrome-devtools-frontend.log index 04d5703e1e1..96c4eb1ff6d 100644 --- a/tests/baselines/reference/user/chrome-devtools-frontend.log +++ b/tests/baselines/reference/user/chrome-devtools-frontend.log @@ -3107,13 +3107,12 @@ node_modules/chrome-devtools-frontend/front_end/bindings/BreakpointManager.js(60 Type '(debuggerModel: DebuggerModel) => void' is not assignable to type '(model: T) => void'. Types of parameters 'debuggerModel' and 'model' are incompatible. Type 'T' is not assignable to type 'DebuggerModel'. -node_modules/chrome-devtools-frontend/front_end/bindings/BreakpointManager.js(97,52): error TS2339: Property 'get' does not exist on type 'Multimap'. -node_modules/chrome-devtools-frontend/front_end/bindings/BreakpointManager.js(120,52): error TS2339: Property 'valuesArray' does not exist on type 'Multimap'. -node_modules/chrome-devtools-frontend/front_end/bindings/BreakpointManager.js(123,34): error TS2339: Property 'clear' does not exist on type 'Multimap'. -node_modules/chrome-devtools-frontend/front_end/bindings/BreakpointManager.js(153,34): error TS2339: Property 'deleteAll' does not exist on type 'Multimap'. +node_modules/chrome-devtools-frontend/front_end/bindings/BreakpointManager.js(97,56): error TS2345: Argument of type 'string' is not assignable to parameter of type 'K'. +node_modules/chrome-devtools-frontend/front_end/bindings/BreakpointManager.js(122,22): error TS2339: Property 'remove' does not exist on type 'V'. +node_modules/chrome-devtools-frontend/front_end/bindings/BreakpointManager.js(153,44): error TS2345: Argument of type 'string' is not assignable to parameter of type 'K'. node_modules/chrome-devtools-frontend/front_end/bindings/BreakpointManager.js(158,22): error TS2694: Namespace 'Common' has no exported member 'Event'. node_modules/chrome-devtools-frontend/front_end/bindings/BreakpointManager.js(166,22): error TS2694: Namespace 'Common' has no exported member 'Event'. -node_modules/chrome-devtools-frontend/front_end/bindings/BreakpointManager.js(181,38): error TS2339: Property 'set' does not exist on type 'Multimap'. +node_modules/chrome-devtools-frontend/front_end/bindings/BreakpointManager.js(181,42): error TS2345: Argument of type 'string' is not assignable to parameter of type 'K'. node_modules/chrome-devtools-frontend/front_end/bindings/BreakpointManager.js(183,45): error TS2339: Property 'remove' does not exist on type 'Map'. node_modules/chrome-devtools-frontend/front_end/bindings/BreakpointManager.js(237,46): error TS2339: Property 'valuesArray' does not exist on type 'Map'. node_modules/chrome-devtools-frontend/front_end/bindings/BreakpointManager.js(300,73): error TS2339: Property 'valuesArray' does not exist on type 'Map>'. @@ -3122,7 +3121,7 @@ node_modules/chrome-devtools-frontend/front_end/bindings/BreakpointManager.js(32 node_modules/chrome-devtools-frontend/front_end/bindings/BreakpointManager.js(330,43): error TS2339: Property 'keysArray' does not exist on type 'Map'. node_modules/chrome-devtools-frontend/front_end/bindings/BreakpointManager.js(350,58): error TS2339: Property 'keysArray' does not exist on type 'Map>>'. node_modules/chrome-devtools-frontend/front_end/bindings/BreakpointManager.js(396,17): error TS2339: Property 'remove' does not exist on type 'Breakpoint[]'. -node_modules/chrome-devtools-frontend/front_end/bindings/BreakpointManager.js(399,34): error TS2339: Property 'delete' does not exist on type 'Multimap'. +node_modules/chrome-devtools-frontend/front_end/bindings/BreakpointManager.js(399,41): error TS2345: Argument of type 'string' is not assignable to parameter of type 'K'. node_modules/chrome-devtools-frontend/front_end/bindings/BreakpointManager.js(442,23): error TS2339: Property 'remove' does not exist on type 'Breakpoint[]'. node_modules/chrome-devtools-frontend/front_end/bindings/BreakpointManager.js(444,23): error TS2339: Property 'remove' does not exist on type 'Map'. node_modules/chrome-devtools-frontend/front_end/bindings/BreakpointManager.js(446,19): error TS2339: Property 'remove' does not exist on type 'Map>'. @@ -3158,19 +3157,18 @@ node_modules/chrome-devtools-frontend/front_end/bindings/CSSWorkspaceBinding.js( node_modules/chrome-devtools-frontend/front_end/bindings/CSSWorkspaceBinding.js(126,15): error TS2355: A function whose declared type is neither 'void' nor 'any' must return a value. node_modules/chrome-devtools-frontend/front_end/bindings/CSSWorkspaceBinding.js(132,15): error TS2355: A function whose declared type is neither 'void' nor 'any' must return a value. node_modules/chrome-devtools-frontend/front_end/bindings/CSSWorkspaceBinding.js(160,14): error TS7014: Function type, which lacks return-type annotation, implicitly has an 'any' return type. -node_modules/chrome-devtools-frontend/front_end/bindings/CSSWorkspaceBinding.js(169,23): error TS2339: Property 'set' does not exist on type 'Multimap'. -node_modules/chrome-devtools-frontend/front_end/bindings/CSSWorkspaceBinding.js(172,30): error TS2339: Property 'set' does not exist on type 'Multimap'. -node_modules/chrome-devtools-frontend/front_end/bindings/CSSWorkspaceBinding.js(182,23): error TS2339: Property 'delete' does not exist on type 'Multimap'. -node_modules/chrome-devtools-frontend/front_end/bindings/CSSWorkspaceBinding.js(184,30): error TS2339: Property 'delete' does not exist on type 'Multimap'. -node_modules/chrome-devtools-frontend/front_end/bindings/CSSWorkspaceBinding.js(191,42): error TS2339: Property 'get' does not exist on type 'Multimap'. +node_modules/chrome-devtools-frontend/front_end/bindings/CSSWorkspaceBinding.js(169,27): error TS2345: Argument of type 'CSSStyleSheetHeader' is not assignable to parameter of type 'K'. +node_modules/chrome-devtools-frontend/front_end/bindings/CSSWorkspaceBinding.js(172,34): error TS2345: Argument of type 'string' is not assignable to parameter of type 'K'. +node_modules/chrome-devtools-frontend/front_end/bindings/CSSWorkspaceBinding.js(182,48): error TS2345: Argument of type 'LiveLocation' is not assignable to parameter of type 'V'. +node_modules/chrome-devtools-frontend/front_end/bindings/CSSWorkspaceBinding.js(184,37): error TS2345: Argument of type 'string' is not assignable to parameter of type 'K'. +node_modules/chrome-devtools-frontend/front_end/bindings/CSSWorkspaceBinding.js(191,46): error TS2345: Argument of type 'CSSStyleSheetHeader' is not assignable to parameter of type 'K'. node_modules/chrome-devtools-frontend/front_end/bindings/CSSWorkspaceBinding.js(196,22): error TS2694: Namespace 'Common' has no exported member 'Event'. -node_modules/chrome-devtools-frontend/front_end/bindings/CSSWorkspaceBinding.js(203,49): error TS2339: Property 'get' does not exist on type 'Multimap'. -node_modules/chrome-devtools-frontend/front_end/bindings/CSSWorkspaceBinding.js(205,23): error TS2339: Property 'set' does not exist on type 'Multimap'. -node_modules/chrome-devtools-frontend/front_end/bindings/CSSWorkspaceBinding.js(208,28): error TS2339: Property 'deleteAll' does not exist on type 'Multimap'. +node_modules/chrome-devtools-frontend/front_end/bindings/CSSWorkspaceBinding.js(204,16): error TS2339: Property '_header' does not exist on type 'V'. +node_modules/chrome-devtools-frontend/front_end/bindings/CSSWorkspaceBinding.js(205,27): error TS2345: Argument of type 'CSSStyleSheetHeader' is not assignable to parameter of type 'K'. +node_modules/chrome-devtools-frontend/front_end/bindings/CSSWorkspaceBinding.js(206,16): error TS2339: Property 'update' does not exist on type 'V'. node_modules/chrome-devtools-frontend/front_end/bindings/CSSWorkspaceBinding.js(212,22): error TS2694: Namespace 'Common' has no exported member 'Event'. -node_modules/chrome-devtools-frontend/front_end/bindings/CSSWorkspaceBinding.js(216,42): error TS2339: Property 'get' does not exist on type 'Multimap'. -node_modules/chrome-devtools-frontend/front_end/bindings/CSSWorkspaceBinding.js(218,30): error TS2339: Property 'set' does not exist on type 'Multimap'. -node_modules/chrome-devtools-frontend/front_end/bindings/CSSWorkspaceBinding.js(221,21): error TS2339: Property 'deleteAll' does not exist on type 'Multimap'. +node_modules/chrome-devtools-frontend/front_end/bindings/CSSWorkspaceBinding.js(216,46): error TS2345: Argument of type 'CSSStyleSheetHeader' is not assignable to parameter of type 'K'. +node_modules/chrome-devtools-frontend/front_end/bindings/CSSWorkspaceBinding.js(221,31): error TS2345: Argument of type 'CSSStyleSheetHeader' is not assignable to parameter of type 'K'. node_modules/chrome-devtools-frontend/front_end/bindings/CSSWorkspaceBinding.js(261,14): error TS7014: Function type, which lacks return-type annotation, implicitly has an 'any' return type. node_modules/chrome-devtools-frontend/front_end/bindings/CompilerScriptMapping.js(184,22): error TS2694: Namespace 'Common' has no exported member 'Event'. node_modules/chrome-devtools-frontend/front_end/bindings/CompilerScriptMapping.js(194,22): error TS2694: Namespace 'Common' has no exported member 'Event'. @@ -3197,9 +3195,9 @@ node_modules/chrome-devtools-frontend/front_end/bindings/DebuggerWorkspaceBindin node_modules/chrome-devtools-frontend/front_end/bindings/DebuggerWorkspaceBinding.js(207,34): error TS2339: Property 'valuesArray' does not exist on type 'Set'. node_modules/chrome-devtools-frontend/front_end/bindings/DebuggerWorkspaceBinding.js(230,22): error TS2694: Namespace 'Common' has no exported member 'Event'. node_modules/chrome-devtools-frontend/front_end/bindings/DebuggerWorkspaceBinding.js(267,14): error TS7014: Function type, which lacks return-type annotation, implicitly has an 'any' return type. -node_modules/chrome-devtools-frontend/front_end/bindings/DebuggerWorkspaceBinding.js(276,21): error TS2339: Property 'set' does not exist on type 'Multimap'. -node_modules/chrome-devtools-frontend/front_end/bindings/DebuggerWorkspaceBinding.js(285,21): error TS2339: Property 'delete' does not exist on type 'Multimap'. -node_modules/chrome-devtools-frontend/front_end/bindings/DebuggerWorkspaceBinding.js(292,42): error TS2339: Property 'get' does not exist on type 'Multimap'. +node_modules/chrome-devtools-frontend/front_end/bindings/DebuggerWorkspaceBinding.js(276,25): error TS2345: Argument of type 'Script' is not assignable to parameter of type 'K'. +node_modules/chrome-devtools-frontend/front_end/bindings/DebuggerWorkspaceBinding.js(285,28): error TS2345: Argument of type 'Script' is not assignable to parameter of type 'K'. +node_modules/chrome-devtools-frontend/front_end/bindings/DebuggerWorkspaceBinding.js(292,46): error TS2345: Argument of type 'Script' is not assignable to parameter of type 'K'. node_modules/chrome-devtools-frontend/front_end/bindings/DebuggerWorkspaceBinding.js(349,14): error TS7014: Function type, which lacks return-type annotation, implicitly has an 'any' return type. node_modules/chrome-devtools-frontend/front_end/bindings/DebuggerWorkspaceBinding.js(389,14): error TS7014: Function type, which lacks return-type annotation, implicitly has an 'any' return type. node_modules/chrome-devtools-frontend/front_end/bindings/DebuggerWorkspaceBinding.js(452,15): error TS2355: A function whose declared type is neither 'void' nor 'any' must return a value. @@ -3326,7 +3324,7 @@ node_modules/chrome-devtools-frontend/front_end/changes/ChangesHighlighter.js(14 node_modules/chrome-devtools-frontend/front_end/changes/ChangesHighlighter.js(155,44): error TS2694: Namespace 'Changes.ChangesHighlighter' has no exported member 'DiffState'. node_modules/chrome-devtools-frontend/front_end/changes/ChangesHighlighter.js(156,45): error TS2694: Namespace 'Changes.ChangesHighlighter' has no exported member 'DiffState'. node_modules/chrome-devtools-frontend/front_end/changes/ChangesHighlighter.js(162,53): error TS2694: Namespace 'Changes.ChangesHighlighter' has no exported member 'DiffState'. -node_modules/chrome-devtools-frontend/front_end/changes/ChangesHighlighter.js(181,28): error TS2339: Property 'DiffState' does not exist on type '(config: any, parserConfig: { diffRows: any[]; baselineLines: string[]; currentLines: string[]; mimeType: string; }) => { startState: () => any; token: (arg0: { backUp: (n: any) => void; column: () => void; current: () => void; ... 10 more ...; sol: () => void; } & StringStream, arg1: any) => string; blankLine: (arg...'. +node_modules/chrome-devtools-frontend/front_end/changes/ChangesHighlighter.js(181,28): error TS2339: Property 'DiffState' does not exist on type '(config: any, parserConfig: { diffRows: any[]; baselineLines: string[]; currentLines: string[]; mimeType: string; }) => { startState: () => any; token: (arg0: StringStream & { backUp: (n: any) => void; column: () => void; ... 11 more ...; sol: () => void; }, arg1: any) => string; blankLine: (arg0: any) => string; co...'. node_modules/chrome-devtools-frontend/front_end/changes/ChangesSidebar.js(30,90): error TS2339: Property 'uiSourceCode' does not exist on type 'TreeElement'. node_modules/chrome-devtools-frontend/front_end/changes/ChangesSidebar.js(38,22): error TS2694: Namespace 'Common' has no exported member 'Event'. node_modules/chrome-devtools-frontend/front_end/changes/ChangesView.js(26,44): error TS2694: Namespace 'Changes.ChangesView' has no exported member 'Row'. @@ -3727,7 +3725,7 @@ node_modules/chrome-devtools-frontend/front_end/common/ModuleExtensionInterfaces node_modules/chrome-devtools-frontend/front_end/common/ModuleExtensionInterfaces.js(20,29): error TS2694: Namespace 'Common.Renderer' has no exported member 'Options'. node_modules/chrome-devtools-frontend/front_end/common/ModuleExtensionInterfaces.js(27,15): error TS2339: Property 'runtime' does not exist on type 'Window'. node_modules/chrome-devtools-frontend/front_end/common/ModuleExtensionInterfaces.js(40,17): error TS2300: Duplicate identifier 'Options'. -node_modules/chrome-devtools-frontend/front_end/common/ModuleExtensionInterfaces.js(40,17): error TS2339: Property 'Options' does not exist on type '{ (): void; prototype: { render(object: any, options: any): Promise; }; renderPromise(object: any, options?: any): Promise; }'. +node_modules/chrome-devtools-frontend/front_end/common/ModuleExtensionInterfaces.js(40,17): error TS2339: Property 'Options' does not exist on type 'typeof Renderer'. node_modules/chrome-devtools-frontend/front_end/common/ModuleExtensionInterfaces.js(63,15): error TS2339: Property 'runtime' does not exist on type 'Window'. node_modules/chrome-devtools-frontend/front_end/common/ModuleExtensionInterfaces.js(81,15): error TS2355: A function whose declared type is neither 'void' nor 'any' must return a value. node_modules/chrome-devtools-frontend/front_end/common/ModuleExtensionInterfaces.js(105,15): error TS2355: A function whose declared type is neither 'void' nor 'any' must return a value. @@ -3744,12 +3742,10 @@ node_modules/chrome-devtools-frontend/front_end/common/Object.js(122,76): error node_modules/chrome-devtools-frontend/front_end/common/Object.js(124,15): error TS2339: Property '_listenerCallbackTuple' does not exist on type 'typeof Object'. node_modules/chrome-devtools-frontend/front_end/common/Object.js(132,112): error TS7014: Function type, which lacks return-type annotation, implicitly has an 'any' return type. node_modules/chrome-devtools-frontend/front_end/common/Object.js(132,129): error TS2694: Namespace 'Common' has no exported member 'Event'. -node_modules/chrome-devtools-frontend/front_end/common/Object.js(134,20): error TS2339: Property 'EventDescriptor' does not exist on type '{ (): void; removeEventListeners(eventList: any[]): void; prototype: { addEventListener(eventType: symbol, listener: (arg0: any) => any, thisObject?: any): any; once(eventType: symbol): Promise<...>; removeEventListener(eventType: symbol, listener: (arg0: any) => any, thisObject?: any): void; hasEventListeners(event...'. +node_modules/chrome-devtools-frontend/front_end/common/Object.js(134,20): error TS2339: Property 'EventDescriptor' does not exist on type 'typeof EventTarget'. node_modules/chrome-devtools-frontend/front_end/common/Object.js(137,39): error TS2694: Namespace 'Common.EventTarget' has no exported member 'EventDescriptor'. -node_modules/chrome-devtools-frontend/front_end/common/Object.js(151,31): error TS2694: Namespace 'Common' has no exported member 'Event'. node_modules/chrome-devtools-frontend/front_end/common/Object.js(153,35): error TS2694: Namespace 'Common.EventTarget' has no exported member 'EventDescriptor'. node_modules/chrome-devtools-frontend/front_end/common/Object.js(159,15): error TS2355: A function whose declared type is neither 'void' nor 'any' must return a value. -node_modules/chrome-devtools-frontend/front_end/common/Object.js(165,31): error TS2694: Namespace 'Common' has no exported member 'Event'. node_modules/chrome-devtools-frontend/front_end/common/Object.js(172,15): error TS2355: A function whose declared type is neither 'void' nor 'any' must return a value. node_modules/chrome-devtools-frontend/front_end/common/OutputStream.js(13,15): error TS2355: A function whose declared type is neither 'void' nor 'any' must return a value. node_modules/chrome-devtools-frontend/front_end/common/ParsedURL.js(122,26): error TS2339: Property '_urlRegexInstance' does not exist on type 'typeof ParsedURL'. @@ -4435,8 +4431,8 @@ node_modules/chrome-devtools-frontend/front_end/cookie_table/CookiesTable.js(416 node_modules/chrome-devtools-frontend/front_end/cookie_table/CookiesTable.js(461,42): error TS2339: Property 'asParsedURL' does not exist on type 'string'. node_modules/chrome-devtools-frontend/front_end/cookie_table/CookiesTable.js(470,51): error TS2339: Property 'asParsedURL' does not exist on type 'string'. node_modules/chrome-devtools-frontend/front_end/cookie_table/CookiesTable.js(489,49): error TS2555: Expected at least 2 arguments, but got 1. -node_modules/chrome-devtools-frontend/front_end/coverage/CoverageDecorationManager.js(50,68): error TS2339: Property 'get' does not exist on type 'Multimap'. -node_modules/chrome-devtools-frontend/front_end/coverage/CoverageDecorationManager.js(115,45): error TS2339: Property 'set' does not exist on type 'Multimap'. +node_modules/chrome-devtools-frontend/front_end/coverage/CoverageDecorationManager.js(50,72): error TS2345: Argument of type '{ contentURL(): string; contentType(): ResourceType; contentEncoded(): Promise; requestContent(): Promise; searchInContent(query: string, caseSensitive: boolean, isRegex: boolean): Promise<...>; }' is not assignable to parameter of type 'K'. +node_modules/chrome-devtools-frontend/front_end/coverage/CoverageDecorationManager.js(115,72): error TS2345: Argument of type 'UISourceCode' is not assignable to parameter of type 'V'. node_modules/chrome-devtools-frontend/front_end/coverage/CoverageDecorationManager.js(135,32): error TS2694: Namespace 'Coverage' has no exported member 'RawLocation'. node_modules/chrome-devtools-frontend/front_end/coverage/CoverageDecorationManager.js(169,16): error TS2403: Subsequent variable declarations must have the same type. Variable 'location' must be of type 'Location', but here has type 'CSSLocation'. node_modules/chrome-devtools-frontend/front_end/coverage/CoverageDecorationManager.js(170,31): error TS2339: Property 'header' does not exist on type 'Location'. @@ -6126,17 +6122,12 @@ node_modules/chrome-devtools-frontend/front_end/event_listeners/EventListenersVi node_modules/chrome-devtools-frontend/front_end/event_listeners/EventListenersView.js(321,13): error TS2339: Property 'consume' does not exist on type 'Event'. node_modules/chrome-devtools-frontend/front_end/extensions/ExtensionAPI.js(93,12): error TS7014: Function type, which lacks return-type annotation, implicitly has an 'any' return type. node_modules/chrome-devtools-frontend/front_end/extensions/ExtensionAPI.js(149,19): error TS1110: Type expected. -node_modules/chrome-devtools-frontend/front_end/extensions/ExtensionAPI.js(186,12): error TS2339: Property '_fire' does not exist on type 'EventSinkImpl'. -node_modules/chrome-devtools-frontend/front_end/extensions/ExtensionAPI.js(298,14): error TS2339: Property '_fire' does not exist on type 'EventSinkImpl'. -node_modules/chrome-devtools-frontend/front_end/extensions/ExtensionAPI.js(300,14): error TS2339: Property '_fire' does not exist on type 'EventSinkImpl'. +node_modules/chrome-devtools-frontend/front_end/extensions/ExtensionAPI.js(300,9): error TS2555: Expected at least 1 arguments, but got 0. node_modules/chrome-devtools-frontend/front_end/extensions/ExtensionAPI.js(314,12): error TS8022: JSDoc '@extends' is not attached to a class. node_modules/chrome-devtools-frontend/front_end/extensions/ExtensionAPI.js(371,12): error TS8022: JSDoc '@extends' is not attached to a class. node_modules/chrome-devtools-frontend/front_end/extensions/ExtensionAPI.js(381,12): error TS8022: JSDoc '@extends' is not attached to a class. node_modules/chrome-devtools-frontend/front_end/extensions/ExtensionAPI.js(391,12): error TS8022: JSDoc '@extends' is not attached to a class. node_modules/chrome-devtools-frontend/front_end/extensions/ExtensionAPI.js(429,12): error TS8022: JSDoc '@extends' is not attached to a class. -node_modules/chrome-devtools-frontend/front_end/extensions/ExtensionAPI.js(529,12): error TS2339: Property '_fire' does not exist on type 'EventSinkImpl'. -node_modules/chrome-devtools-frontend/front_end/extensions/ExtensionAPI.js(544,12): error TS2339: Property '_fire' does not exist on type 'EventSinkImpl'. -node_modules/chrome-devtools-frontend/front_end/extensions/ExtensionAPI.js(551,12): error TS2339: Property '_fire' does not exist on type 'EventSinkImpl'. node_modules/chrome-devtools-frontend/front_end/extensions/ExtensionAPI.js(789,21): error TS2339: Property 'exposeWebInspectorNamespace' does not exist on type 'ExtensionDescriptor'. node_modules/chrome-devtools-frontend/front_end/extensions/ExtensionAPI.js(790,12): error TS2339: Property 'webInspector' does not exist on type 'Window'. node_modules/chrome-devtools-frontend/front_end/extensions/ExtensionAPI.js(798,12): error TS7014: Function type, which lacks return-type annotation, implicitly has an 'any' return type. @@ -6537,8 +6528,6 @@ node_modules/chrome-devtools-frontend/front_end/heap_snapshot_worker/HeapSnapsho node_modules/chrome-devtools-frontend/front_end/heap_snapshot_worker/HeapSnapshot.js(918,34): error TS2345: Argument of type 'Uint32Array' is not assignable to parameter of type 'number[]'. Type 'Uint32Array' is missing the following properties from type 'number[]': pop, push, concat, shift, and 5 more. node_modules/chrome-devtools-frontend/front_end/heap_snapshot_worker/HeapSnapshot.js(920,34): error TS2345: Argument of type 'Uint32Array' is not assignable to parameter of type 'number[]'. -node_modules/chrome-devtools-frontend/front_end/heap_snapshot_worker/HeapSnapshot.js(1020,16): error TS2587: JSDoc type 'JSHeapSnapshotEdge' circularly references itself. -node_modules/chrome-devtools-frontend/front_end/heap_snapshot_worker/HeapSnapshot.js(1028,16): error TS2587: JSDoc type 'JSHeapSnapshotRetainerEdge' circularly references itself. node_modules/chrome-devtools-frontend/front_end/heap_snapshot_worker/HeapSnapshot.js(1045,5): error TS2322: Type 'void' is not assignable to type 'HeapSnapshotNode'. node_modules/chrome-devtools-frontend/front_end/heap_snapshot_worker/HeapSnapshot.js(1083,14): error TS2339: Property 'key' does not exist on type '(arg0: HeapSnapshotNode) => boolean'. node_modules/chrome-devtools-frontend/front_end/heap_snapshot_worker/HeapSnapshot.js(1086,14): error TS2339: Property 'key' does not exist on type '(arg0: HeapSnapshotNode) => boolean'. @@ -6602,7 +6591,6 @@ node_modules/chrome-devtools-frontend/front_end/heap_snapshot_worker/HeapSnapsho Types of property 'item' are incompatible. Type '() => HeapSnapshotEdge' is not assignable to type '() => { itemIndex(): number; serialize(): any; }'. Type 'HeapSnapshotEdge' is not assignable to type '{ itemIndex(): number; serialize(): any; }'. - Property '_snapshot' does not exist on type '{ itemIndex(): number; serialize(): any; }'. node_modules/chrome-devtools-frontend/front_end/heap_snapshot_worker/HeapSnapshot.js(2283,13): error TS2339: Property 'nodeIndex' does not exist on type 'void'. node_modules/chrome-devtools-frontend/front_end/heap_snapshot_worker/HeapSnapshot.js(2287,13): error TS2339: Property 'nodeIndex' does not exist on type 'void'. node_modules/chrome-devtools-frontend/front_end/heap_snapshot_worker/HeapSnapshot.js(2322,28): error TS2339: Property 'sortRange' does not exist on type 'number[]'. @@ -6879,7 +6867,6 @@ node_modules/chrome-devtools-frontend/front_end/layer_viewer/LayerTreeOutline.js node_modules/chrome-devtools-frontend/front_end/layer_viewer/LayerTreeOutline.js(199,80): error TS2339: Property '_layer' does not exist on type 'TreeElement'. node_modules/chrome-devtools-frontend/front_end/layer_viewer/LayerTreeOutline.js(222,11): error TS2339: Property 'createTextChild' does not exist on type 'DocumentFragment'. node_modules/chrome-devtools-frontend/front_end/layer_viewer/LayerTreeOutline.js(223,25): error TS2339: Property 'createChild' does not exist on type 'DocumentFragment'. -node_modules/chrome-devtools-frontend/front_end/layer_viewer/LayerViewHost.js(110,15): error TS2587: JSDoc type 'Layer' circularly references itself. node_modules/chrome-devtools-frontend/front_end/layer_viewer/LayerViewHost.js(125,84): error TS2339: Property 'scrollRectIndex' does not exist on type 'Selection'. node_modules/chrome-devtools-frontend/front_end/layer_viewer/LayerViewHost.js(135,19): error TS2694: Namespace 'SDK' has no exported member 'SnapshotWithRect'. node_modules/chrome-devtools-frontend/front_end/layer_viewer/LayerViewHost.js(149,34): error TS2339: Property '_snapshot' does not exist on type 'Selection'. @@ -8229,11 +8216,11 @@ node_modules/chrome-devtools-frontend/front_end/persistence/Persistence.js(62,5) node_modules/chrome-devtools-frontend/front_end/persistence/Persistence.js(176,22): error TS2694: Namespace 'Common' has no exported member 'Event'. node_modules/chrome-devtools-frontend/front_end/persistence/Persistence.js(218,22): error TS2694: Namespace 'Common' has no exported member 'Event'. node_modules/chrome-devtools-frontend/front_end/persistence/Persistence.js(323,14): error TS7014: Function type, which lacks return-type annotation, implicitly has an 'any' return type. -node_modules/chrome-devtools-frontend/front_end/persistence/Persistence.js(326,43): error TS2339: Property 'set' does not exist on type 'Multimap'. +node_modules/chrome-devtools-frontend/front_end/persistence/Persistence.js(326,47): error TS2345: Argument of type 'UISourceCode' is not assignable to parameter of type 'K'. node_modules/chrome-devtools-frontend/front_end/persistence/Persistence.js(331,14): error TS7014: Function type, which lacks return-type annotation, implicitly has an 'any' return type. -node_modules/chrome-devtools-frontend/front_end/persistence/Persistence.js(334,43): error TS2339: Property 'delete' does not exist on type 'Multimap'. -node_modules/chrome-devtools-frontend/front_end/persistence/Persistence.js(341,48): error TS2339: Property 'has' does not exist on type 'Multimap'. -node_modules/chrome-devtools-frontend/front_end/persistence/Persistence.js(343,70): error TS2339: Property 'get' does not exist on type 'Multimap'. +node_modules/chrome-devtools-frontend/front_end/persistence/Persistence.js(334,50): error TS2345: Argument of type 'UISourceCode' is not assignable to parameter of type 'K'. +node_modules/chrome-devtools-frontend/front_end/persistence/Persistence.js(341,52): error TS2345: Argument of type 'UISourceCode' is not assignable to parameter of type 'K'. +node_modules/chrome-devtools-frontend/front_end/persistence/Persistence.js(343,74): error TS2345: Argument of type 'UISourceCode' is not assignable to parameter of type 'K'. node_modules/chrome-devtools-frontend/front_end/persistence/PersistenceActions.js(30,44): error TS2555: Expected at least 2 arguments, but got 1. node_modules/chrome-devtools-frontend/front_end/persistence/PersistenceActions.js(34,9): error TS2555: Expected at least 2 arguments, but got 1. node_modules/chrome-devtools-frontend/front_end/persistence/PersistenceActions.js(39,44): error TS2555: Expected at least 2 arguments, but got 1. @@ -8356,7 +8343,7 @@ node_modules/chrome-devtools-frontend/front_end/product_registry/ProductRegistry node_modules/chrome-devtools-frontend/front_end/product_registry/ProductRegistry.js(28,41): error TS2694: Namespace 'ProductRegistry.Registry' has no exported member 'ProductEntry'. node_modules/chrome-devtools-frontend/front_end/product_registry/ProductRegistry.js(34,15): error TS2355: A function whose declared type is neither 'void' nor 'any' must return a value. node_modules/chrome-devtools-frontend/front_end/product_registry/ProductRegistry.js(55,41): error TS2694: Namespace 'ProductRegistry.Registry' has no exported member 'ProductEntry'. -node_modules/chrome-devtools-frontend/front_end/product_registry/ProductRegistry.js(72,26): error TS2339: Property 'ProductEntry' does not exist on type '{ (): void; prototype: { nameForUrl: (parsedUrl: ParsedURL) => string; entryForUrl: (parsedUrl: ParsedURL) => any; typeForUrl: (parsedUrl: ParsedURL) => number; }; }'. +node_modules/chrome-devtools-frontend/front_end/product_registry/ProductRegistry.js(72,26): error TS2339: Property 'ProductEntry' does not exist on type 'typeof Registry'. node_modules/chrome-devtools-frontend/front_end/product_registry_impl/ProductRegistryData.js(1559,42): error TS2741: Property 'type' is missing in type '{ "product": number; }' but required in type '{ product: number; type: number; }'. node_modules/chrome-devtools-frontend/front_end/product_registry_impl/ProductRegistryData.js(1563,42): error TS2741: Property 'type' is missing in type '{ "product": number; }' but required in type '{ product: number; type: number; }'. node_modules/chrome-devtools-frontend/front_end/product_registry_impl/ProductRegistryData.js(1604,42): error TS2741: Property 'type' is missing in type '{ "product": number; }' but required in type '{ product: number; type: number; }'. @@ -8752,7 +8739,6 @@ node_modules/chrome-devtools-frontend/front_end/profiler/HeapSnapshotGridNodes.j Type 'HeapSnapshotProviderProxy' is not assignable to type '{ dispose(): void; nodePosition(snapshotObjectId: number): Promise; isEmpty(): Promise; serializeItemsRange(startPosition: number, endPosition: number): Promise<...>; sortAndRewind(comparator: ComparatorConfig): Promise<...>; }'. Property '_worker' does not exist on type '{ dispose(): void; nodePosition(snapshotObjectId: number): Promise; isEmpty(): Promise; serializeItemsRange(startPosition: number, endPosition: number): Promise<...>; sortAndRewind(comparator: ComparatorConfig): Promise<...>; }'. node_modules/chrome-devtools-frontend/front_end/profiler/HeapSnapshotGridNodes.js(804,15): error TS2577: Return type annotation circularly references itself. -node_modules/chrome-devtools-frontend/front_end/profiler/HeapSnapshotGridNodes.js(804,16): error TS2587: JSDoc type 'HeapSnapshotRetainingObjectNode' circularly references itself. node_modules/chrome-devtools-frontend/front_end/profiler/HeapSnapshotGridNodes.js(871,36): error TS2339: Property 'withThousandsSeparator' does not exist on type 'NumberConstructor'. node_modules/chrome-devtools-frontend/front_end/profiler/HeapSnapshotGridNodes.js(874,34): error TS2339: Property 'withThousandsSeparator' does not exist on type 'NumberConstructor'. node_modules/chrome-devtools-frontend/front_end/profiler/HeapSnapshotGridNodes.js(892,3): error TS2416: Property 'createProvider' in type 'HeapSnapshotInstanceNode' is not assignable to the same property in base type 'HeapSnapshotGenericObjectNode'. @@ -9070,9 +9056,9 @@ node_modules/chrome-devtools-frontend/front_end/protocol/InspectorBackend.js(170 node_modules/chrome-devtools-frontend/front_end/protocol/InspectorBackend.js(194,15): error TS2355: A function whose declared type is neither 'void' nor 'any' must return a value. node_modules/chrome-devtools-frontend/front_end/protocol/InspectorBackend.js(201,17): error TS7014: Function type, which lacks return-type annotation, implicitly has an 'any' return type. node_modules/chrome-devtools-frontend/front_end/protocol/InspectorBackend.js(202,20): error TS7014: Function type, which lacks return-type annotation, implicitly has an 'any' return type. -node_modules/chrome-devtools-frontend/front_end/protocol/InspectorBackend.js(205,38): error TS2339: Property 'Params' does not exist on type '{ (): void; prototype: { sendMessage(message: string): void; disconnect(): Promise; }; }'. +node_modules/chrome-devtools-frontend/front_end/protocol/InspectorBackend.js(205,38): error TS2339: Property 'Params' does not exist on type 'typeof Connection'. node_modules/chrome-devtools-frontend/front_end/protocol/InspectorBackend.js(208,61): error TS2694: Namespace 'Protocol.InspectorBackend.Connection' has no exported member 'Params'. -node_modules/chrome-devtools-frontend/front_end/protocol/InspectorBackend.js(210,38): error TS2339: Property 'Factory' does not exist on type '{ (): void; prototype: { sendMessage(message: string): void; disconnect(): Promise; }; }'. +node_modules/chrome-devtools-frontend/front_end/protocol/InspectorBackend.js(210,38): error TS2339: Property 'Factory' does not exist on type 'typeof Connection'. node_modules/chrome-devtools-frontend/front_end/protocol/InspectorBackend.js(217,53): error TS2694: Namespace 'Protocol.InspectorBackend.Connection' has no exported member 'Factory'. node_modules/chrome-devtools-frontend/front_end/protocol/InspectorBackend.js(229,36): error TS2339: Property 'deprecatedRunAfterPendingDispatches' does not exist on type 'typeof InspectorBackend'. node_modules/chrome-devtools-frontend/front_end/protocol/InspectorBackend.js(230,33): error TS2339: Property 'deprecatedRunAfterPendingDispatches' does not exist on type 'typeof InspectorBackend'. @@ -9688,7 +9674,6 @@ node_modules/chrome-devtools-frontend/front_end/sdk/CSSStyleDeclaration.js(41,47 node_modules/chrome-devtools-frontend/front_end/sdk/CSSStyleDeclaration.js(50,24): error TS2694: Namespace 'Protocol' has no exported member 'CSS'. node_modules/chrome-devtools-frontend/front_end/sdk/CSSStyleSheetHeader.js(11,24): error TS2694: Namespace 'Protocol' has no exported member 'CSS'. node_modules/chrome-devtools-frontend/front_end/sdk/CSSStyleSheetHeader.js(40,5): error TS2322: Type 'StaticContentProvider' is not assignable to type '{ contentURL(): string; contentType(): ResourceType; contentEncoded(): Promise; requestContent(): Promise; searchInContent(query: string, caseSensitive: boolean, isRegex: boolean): Promise<...>; }'. - Property '_contentURL' does not exist on type '{ contentURL(): string; contentType(): ResourceType; contentEncoded(): Promise; requestContent(): Promise; searchInContent(query: string, caseSensitive: boolean, isRegex: boolean): Promise<...>; }'. node_modules/chrome-devtools-frontend/front_end/sdk/Connections.js(10,52): error TS2694: Namespace 'Protocol.InspectorBackend.Connection' has no exported member 'Params'. node_modules/chrome-devtools-frontend/front_end/sdk/Connections.js(34,22): error TS2694: Namespace 'Common' has no exported member 'Event'. node_modules/chrome-devtools-frontend/front_end/sdk/Connections.js(41,22): error TS2694: Namespace 'Common' has no exported member 'Event'. @@ -9848,7 +9833,6 @@ node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(250,43): er node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(281,43): error TS2694: Namespace 'SDK.DebuggerModel' has no exported member 'SetBreakpointResult'. node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(304,43): error TS2694: Namespace 'SDK.DebuggerModel' has no exported member 'SetBreakpointResult'. node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(319,24): error TS2694: Namespace 'Protocol' has no exported member 'Debugger'. -node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(332,32): error TS2587: JSDoc type 'BreakLocation' circularly references itself. node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(346,24): error TS2694: Namespace 'Protocol' has no exported member 'Runtime'. node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(347,34): error TS2694: Namespace 'Protocol' has no exported member 'Runtime'. node_modules/chrome-devtools-frontend/front_end/sdk/DebuggerModel.js(355,24): error TS2694: Namespace 'Protocol' has no exported member 'Debugger'. @@ -9936,7 +9920,6 @@ node_modules/chrome-devtools-frontend/front_end/sdk/HeapProfilerModel.js(44,34): node_modules/chrome-devtools-frontend/front_end/sdk/LayerTreeBase.js(5,25): error TS2694: Namespace 'Protocol' has no exported member 'DOM'. node_modules/chrome-devtools-frontend/front_end/sdk/LayerTreeBase.js(18,15): error TS2355: A function whose declared type is neither 'void' nor 'any' must return a value. node_modules/chrome-devtools-frontend/front_end/sdk/LayerTreeBase.js(23,15): error TS2355: A function whose declared type is neither 'void' nor 'any' must return a value. -node_modules/chrome-devtools-frontend/front_end/sdk/LayerTreeBase.js(28,15): error TS2355: A function whose declared type is neither 'void' nor 'any' must return a value. node_modules/chrome-devtools-frontend/front_end/sdk/LayerTreeBase.js(33,15): error TS2355: A function whose declared type is neither 'void' nor 'any' must return a value. node_modules/chrome-devtools-frontend/front_end/sdk/LayerTreeBase.js(38,15): error TS2355: A function whose declared type is neither 'void' nor 'any' must return a value. node_modules/chrome-devtools-frontend/front_end/sdk/LayerTreeBase.js(45,12): error TS2502: 'child' is referenced directly or indirectly in its own type annotation. @@ -10067,7 +10050,6 @@ node_modules/chrome-devtools-frontend/front_end/sdk/NetworkManager.js(812,57): e node_modules/chrome-devtools-frontend/front_end/sdk/NetworkManager.js(812,108): error TS2694: Namespace 'SDK.MultitargetNetworkManager' has no exported member 'InterceptionPattern'. node_modules/chrome-devtools-frontend/front_end/sdk/NetworkManager.js(827,21): error TS2339: Property 'sprintf' does not exist on type 'StringConstructor'. node_modules/chrome-devtools-frontend/front_end/sdk/NetworkManager.js(836,31): error TS2339: Property 'networkAgent' does not exist on type 'Target'. -node_modules/chrome-devtools-frontend/front_end/sdk/NetworkManager.js(844,75): error TS2339: Property 'valuesArray' does not exist on type 'Multimap'. node_modules/chrome-devtools-frontend/front_end/sdk/NetworkManager.js(855,32): error TS2339: Property 'networkAgent' does not exist on type 'Target'. node_modules/chrome-devtools-frontend/front_end/sdk/NetworkManager.js(874,34): error TS2694: Namespace 'SDK.NetworkManager' has no exported member 'Conditions'. node_modules/chrome-devtools-frontend/front_end/sdk/NetworkManager.js(884,35): error TS2694: Namespace 'SDK.NetworkManager' has no exported member 'Conditions'. @@ -10075,13 +10057,9 @@ node_modules/chrome-devtools-frontend/front_end/sdk/NetworkManager.js(891,24): e node_modules/chrome-devtools-frontend/front_end/sdk/NetworkManager.js(905,24): error TS2694: Namespace 'Protocol' has no exported member 'Network'. node_modules/chrome-devtools-frontend/front_end/sdk/NetworkManager.js(955,42): error TS2694: Namespace 'SDK.NetworkManager' has no exported member 'BlockedPattern'. node_modules/chrome-devtools-frontend/front_end/sdk/NetworkManager.js(976,41): error TS2694: Namespace 'SDK.NetworkManager' has no exported member 'BlockedPattern'. -node_modules/chrome-devtools-frontend/front_end/sdk/NetworkManager.js(1015,46): error TS2339: Property 'size' does not exist on type 'Multimap'. node_modules/chrome-devtools-frontend/front_end/sdk/NetworkManager.js(1019,52): error TS2694: Namespace 'SDK.MultitargetNetworkManager' has no exported member 'InterceptionPattern'. node_modules/chrome-devtools-frontend/front_end/sdk/NetworkManager.js(1020,45): error TS2694: Namespace 'SDK.MultitargetNetworkManager' has no exported member 'RequestInterceptor'. -node_modules/chrome-devtools-frontend/front_end/sdk/NetworkManager.js(1025,37): error TS2339: Property 'deleteAll' does not exist on type 'Multimap'. -node_modules/chrome-devtools-frontend/front_end/sdk/NetworkManager.js(1027,39): error TS2339: Property 'set' does not exist on type 'Multimap'. -node_modules/chrome-devtools-frontend/front_end/sdk/NetworkManager.js(1050,82): error TS2339: Property 'valuesArray' does not exist on type 'Multimap'. -node_modules/chrome-devtools-frontend/front_end/sdk/NetworkManager.js(1059,68): error TS2339: Property 'keysArray' does not exist on type 'Multimap'. +node_modules/chrome-devtools-frontend/front_end/sdk/NetworkManager.js(1060,13): error TS2349: Cannot invoke an expression whose type lacks a call signature. Type '{}' has no compatible call signatures. node_modules/chrome-devtools-frontend/front_end/sdk/NetworkManager.js(1084,19): error TS2339: Property 'networkAgent' does not exist on type 'Target'. node_modules/chrome-devtools-frontend/front_end/sdk/NetworkManager.js(1089,14): error TS7014: Function type, which lacks return-type annotation, implicitly has an 'any' return type. node_modules/chrome-devtools-frontend/front_end/sdk/NetworkManager.js(1101,35): error TS2345: Argument of type '{}' is not assignable to parameter of type '{ [x: string]: string; }'. @@ -10433,7 +10411,6 @@ node_modules/chrome-devtools-frontend/front_end/sdk/ScreenCaptureModel.js(160,24 node_modules/chrome-devtools-frontend/front_end/sdk/Script.js(39,24): error TS2694: Namespace 'Protocol' has no exported member 'Runtime'. node_modules/chrome-devtools-frontend/front_end/sdk/Script.js(143,52): error TS2339: Property 'debuggerAgent' does not exist on type 'Target'. node_modules/chrome-devtools-frontend/front_end/sdk/Script.js(159,5): error TS2322: Type 'StaticContentProvider' is not assignable to type '{ contentURL(): string; contentType(): ResourceType; contentEncoded(): Promise; requestContent(): Promise; searchInContent(query: string, caseSensitive: boolean, isRegex: boolean): Promise<...>; }'. - Property '_contentURL' does not exist on type '{ contentURL(): string; contentType(): ResourceType; contentEncoded(): Promise; requestContent(): Promise; searchInContent(query: string, caseSensitive: boolean, isRegex: boolean): Promise<...>; }'. node_modules/chrome-devtools-frontend/front_end/sdk/Script.js(174,43): error TS2339: Property 'debuggerAgent' does not exist on type 'Target'. node_modules/chrome-devtools-frontend/front_end/sdk/Script.js(190,14): error TS7014: Function type, which lacks return-type annotation, implicitly has an 'any' return type. node_modules/chrome-devtools-frontend/front_end/sdk/Script.js(190,50): error TS2694: Namespace 'Protocol' has no exported member 'Runtime'. @@ -10499,7 +10476,6 @@ node_modules/chrome-devtools-frontend/front_end/sdk/SourceMap.js(198,25): error node_modules/chrome-devtools-frontend/front_end/sdk/SourceMap.js(200,27): error TS2339: Property '_base64Map' does not exist on type 'typeof TextSourceMap'. node_modules/chrome-devtools-frontend/front_end/sdk/SourceMap.js(272,30): error TS2339: Property 'keysArray' does not exist on type 'Map'. node_modules/chrome-devtools-frontend/front_end/sdk/SourceMap.js(284,7): error TS2322: Type 'StaticContentProvider' is not assignable to type '{ contentURL(): string; contentType(): ResourceType; contentEncoded(): Promise; requestContent(): Promise; searchInContent(query: string, caseSensitive: boolean, isRegex: boolean): Promise<...>; }'. - Property '_contentURL' does not exist on type '{ contentURL(): string; contentType(): ResourceType; contentEncoded(): Promise; requestContent(): Promise; searchInContent(query: string, caseSensitive: boolean, isRegex: boolean): Promise<...>; }'. node_modules/chrome-devtools-frontend/front_end/sdk/SourceMap.js(285,5): error TS2322: Type 'CompilerSourceMappingContentProvider' is not assignable to type '{ contentURL(): string; contentType(): ResourceType; contentEncoded(): Promise; requestContent(): Promise; searchInContent(query: string, caseSensitive: boolean, isRegex: boolean): Promise<...>; }'. Property '_sourceURL' does not exist on type '{ contentURL(): string; contentType(): ResourceType; contentEncoded(): Promise; requestContent(): Promise; searchInContent(query: string, caseSensitive: boolean, isRegex: boolean): Promise<...>; }'. node_modules/chrome-devtools-frontend/front_end/sdk/SourceMap.js(325,26): error TS2339: Property 'upperBound' does not exist on type 'SourceMapEntry[]'. @@ -10516,24 +10492,24 @@ node_modules/chrome-devtools-frontend/front_end/sdk/SourceMap.js(527,37): error node_modules/chrome-devtools-frontend/front_end/sdk/SourceMap.js(558,18): error TS2339: Property 'lowerBound' does not exist on type 'SourceMapEntry[]'. node_modules/chrome-devtools-frontend/front_end/sdk/SourceMap.js(559,29): error TS2339: Property 'upperBound' does not exist on type 'SourceMapEntry[]'. node_modules/chrome-devtools-frontend/front_end/sdk/SourceMapManager.js(52,22): error TS2694: Namespace 'Common' has no exported member 'Event'. -node_modules/chrome-devtools-frontend/front_end/sdk/SourceMapManager.js(85,37): error TS2339: Property 'has' does not exist on type 'Multimap'. -node_modules/chrome-devtools-frontend/front_end/sdk/SourceMapManager.js(86,42): error TS2339: Property 'get' does not exist on type 'Multimap'. -node_modules/chrome-devtools-frontend/front_end/sdk/SourceMapManager.js(87,47): error TS2339: Property 'get' does not exist on type 'Multimap'. -node_modules/chrome-devtools-frontend/front_end/sdk/SourceMapManager.js(141,45): error TS2339: Property 'has' does not exist on type 'Multimap'. -node_modules/chrome-devtools-frontend/front_end/sdk/SourceMapManager.js(146,40): error TS2339: Property 'set' does not exist on type 'Multimap'. +node_modules/chrome-devtools-frontend/front_end/sdk/SourceMapManager.js(85,41): error TS2345: Argument of type 'string' is not assignable to parameter of type 'K'. +node_modules/chrome-devtools-frontend/front_end/sdk/SourceMapManager.js(86,46): error TS2345: Argument of type 'string' is not assignable to parameter of type 'K'. +node_modules/chrome-devtools-frontend/front_end/sdk/SourceMapManager.js(87,51): error TS2345: Argument of type 'string' is not assignable to parameter of type 'K'. +node_modules/chrome-devtools-frontend/front_end/sdk/SourceMapManager.js(141,49): error TS2345: Argument of type 'string' is not assignable to parameter of type 'K'. +node_modules/chrome-devtools-frontend/front_end/sdk/SourceMapManager.js(146,44): error TS2345: Argument of type 'string' is not assignable to parameter of type 'K'. node_modules/chrome-devtools-frontend/front_end/sdk/SourceMapManager.js(159,36): error TS2352: Conversion of type 'TextSourceMap' to type '{ compiledURL(): string; url(): string; sourceURLs(): string[]; sourceContentProvider(sourceURL: string, contentType: ResourceType): { contentURL(): string; contentType(): ResourceType; contentEncoded(): Promise<...>; requestContent(): Promise<...>; searchInContent(query: string, caseSensitive: boolean, isRegex: boo...' may be a mistake because neither type sufficiently overlaps with the other. If this was intentional, convert the expression to 'unknown' first. node_modules/chrome-devtools-frontend/front_end/sdk/SourceMapManager.js(159,36): error TS2352: Conversion of type 'TextSourceMap' to type '{ compiledURL(): string; url(): string; sourceURLs(): string[]; sourceContentProvider(sourceURL: string, contentType: ResourceType): { contentURL(): string; contentType(): ResourceType; contentEncoded(): Promise<...>; requestContent(): Promise<...>; searchInContent(query: string, caseSensitive: boolean, isRegex: boo...' may be a mistake because neither type sufficiently overlaps with the other. If this was intentional, convert the expression to 'unknown' first. Property '_json' does not exist on type '{ compiledURL(): string; url(): string; sourceURLs(): string[]; sourceContentProvider(sourceURL: string, contentType: ResourceType): { contentURL(): string; contentType(): ResourceType; contentEncoded(): Promise<...>; requestContent(): Promise<...>; searchInContent(query: string, caseSensitive: boolean, isRegex: boo...'. node_modules/chrome-devtools-frontend/front_end/sdk/SourceMapManager.js(163,12): error TS2339: Property 'catchException' does not exist on type 'Promise'. -node_modules/chrome-devtools-frontend/front_end/sdk/SourceMapManager.js(173,56): error TS2339: Property 'get' does not exist on type 'Multimap'. -node_modules/chrome-devtools-frontend/front_end/sdk/SourceMapManager.js(174,42): error TS2339: Property 'deleteAll' does not exist on type 'Multimap'. -node_modules/chrome-devtools-frontend/front_end/sdk/SourceMapManager.js(193,35): error TS2339: Property 'set' does not exist on type 'Multimap'. +node_modules/chrome-devtools-frontend/front_end/sdk/SourceMapManager.js(173,60): error TS2345: Argument of type 'string' is not assignable to parameter of type 'K'. +node_modules/chrome-devtools-frontend/front_end/sdk/SourceMapManager.js(174,52): error TS2345: Argument of type 'string' is not assignable to parameter of type 'K'. +node_modules/chrome-devtools-frontend/front_end/sdk/SourceMapManager.js(193,39): error TS2345: Argument of type 'string' is not assignable to parameter of type 'K'. node_modules/chrome-devtools-frontend/front_end/sdk/SourceMapManager.js(208,39): error TS2339: Property 'runtime' does not exist on type 'Window'. node_modules/chrome-devtools-frontend/front_end/sdk/SourceMapManager.js(210,31): error TS2339: Property 'containsAll' does not exist on type 'Set'. -node_modules/chrome-devtools-frontend/front_end/sdk/SourceMapManager.js(227,38): error TS2339: Property 'hasValue' does not exist on type 'Multimap'. -node_modules/chrome-devtools-frontend/front_end/sdk/SourceMapManager.js(228,46): error TS2339: Property 'delete' does not exist on type 'Multimap'. -node_modules/chrome-devtools-frontend/front_end/sdk/SourceMapManager.js(232,33): error TS2339: Property 'delete' does not exist on type 'Multimap'. -node_modules/chrome-devtools-frontend/front_end/sdk/SourceMapManager.js(234,38): error TS2339: Property 'has' does not exist on type 'Multimap'. +node_modules/chrome-devtools-frontend/front_end/sdk/SourceMapManager.js(227,47): error TS2345: Argument of type 'string' is not assignable to parameter of type 'K'. +node_modules/chrome-devtools-frontend/front_end/sdk/SourceMapManager.js(228,53): error TS2345: Argument of type 'string' is not assignable to parameter of type 'K'. +node_modules/chrome-devtools-frontend/front_end/sdk/SourceMapManager.js(232,40): error TS2345: Argument of type 'string' is not assignable to parameter of type 'K'. +node_modules/chrome-devtools-frontend/front_end/sdk/SourceMapManager.js(234,42): error TS2345: Argument of type 'string' is not assignable to parameter of type 'K'. node_modules/chrome-devtools-frontend/front_end/sdk/Target.js(16,52): error TS2694: Namespace 'Protocol.InspectorBackend.Connection' has no exported member 'Factory'. node_modules/chrome-devtools-frontend/front_end/sdk/Target.js(148,48): error TS2339: Property 'valuesArray' does not exist on type 'Map'. node_modules/chrome-devtools-frontend/front_end/sdk/Target.js(159,53): error TS2345: Argument of type 'new (arg1: Target) => T' is not assignable to parameter of type 'new (arg1: Target) => SDKModel'. @@ -10621,7 +10597,6 @@ node_modules/chrome-devtools-frontend/front_end/sdk/TracingModel.js(576,43): err node_modules/chrome-devtools-frontend/front_end/sdk/TracingModel.js(576,55): error TS2339: Property 'ordinal' does not exist on type 'Event'. node_modules/chrome-devtools-frontend/front_end/sdk/TracingModel.js(647,34): error TS2694: Namespace 'SDK.TracingManager' has no exported member 'EventPayload'. node_modules/chrome-devtools-frontend/front_end/sdk/TracingModel.js(649,15): error TS2577: Return type annotation circularly references itself. -node_modules/chrome-devtools-frontend/front_end/sdk/TracingModel.js(649,16): error TS2587: JSDoc type 'ObjectSnapshot' circularly references itself. node_modules/chrome-devtools-frontend/front_end/sdk/TracingModel.js(666,14): error TS7014: Function type, which lacks return-type annotation, implicitly has an 'any' return type. node_modules/chrome-devtools-frontend/front_end/sdk/TracingModel.js(859,34): error TS2694: Namespace 'SDK.TracingManager' has no exported member 'EventPayload'. node_modules/chrome-devtools-frontend/front_end/sdk/TracingModel.js(870,5): error TS2322: Type 'NamedObject[]' is not assignable to type 'Thread[]'. @@ -10895,7 +10870,6 @@ node_modules/chrome-devtools-frontend/front_end/source_frame/JSONView.js(170,23) node_modules/chrome-devtools-frontend/front_end/source_frame/PreviewFactory.js(14,33): error TS2555: Expected at least 2 arguments, but got 1. node_modules/chrome-devtools-frontend/front_end/source_frame/ResourceSourceFrame.js(51,35): error TS2555: Expected at least 2 arguments, but got 1. node_modules/chrome-devtools-frontend/front_end/source_frame/SourceCodeDiff.js(15,22): error TS2339: Property 'installGutter' does not exist on type 'CodeMirrorTextEditor'. -node_modules/chrome-devtools-frontend/front_end/source_frame/SourceCodeDiff.js(18,24): error TS2587: JSDoc type 'TextEditorPositionHandle' circularly references itself. node_modules/chrome-devtools-frontend/front_end/source_frame/SourceCodeDiff.js(89,28): error TS2339: Property 'toggleLineClass' does not exist on type 'CodeMirrorTextEditor'. node_modules/chrome-devtools-frontend/front_end/source_frame/SourceCodeDiff.js(110,25): error TS2694: Namespace 'Diff.Diff' has no exported member 'DiffArray'. node_modules/chrome-devtools-frontend/front_end/source_frame/SourceCodeDiff.js(177,25): error TS2694: Namespace 'Diff.Diff' has no exported member 'DiffArray'. @@ -10911,54 +10885,16 @@ node_modules/chrome-devtools-frontend/front_end/source_frame/SourceFrame.js(435, node_modules/chrome-devtools-frontend/front_end/source_frame/SourceFrame.js(459,15): error TS2339: Property '__fromRegExpQuery' does not exist on type 'RegExp'. node_modules/chrome-devtools-frontend/front_end/source_frame/SourceFrame.js(472,36): error TS2339: Property 'lowerBound' does not exist on type 'TextRange[]'. node_modules/chrome-devtools-frontend/front_end/source_frame/SourceFrame.js(475,46): error TS2339: Property 'computeLineEndings' does not exist on type 'string'. -node_modules/chrome-devtools-frontend/front_end/source_frame/SourcesTextEditor.js(19,23): error TS2339: Property 'addKeyMap' does not exist on type 'CodeMirror'. -node_modules/chrome-devtools-frontend/front_end/source_frame/SourcesTextEditor.js(23,23): error TS2339: Property 'on' does not exist on type 'CodeMirror'. -node_modules/chrome-devtools-frontend/front_end/source_frame/SourcesTextEditor.js(24,23): error TS2339: Property 'on' does not exist on type 'CodeMirror'. -node_modules/chrome-devtools-frontend/front_end/source_frame/SourcesTextEditor.js(25,23): error TS2339: Property 'on' does not exist on type 'CodeMirror'. -node_modules/chrome-devtools-frontend/front_end/source_frame/SourcesTextEditor.js(26,23): error TS2339: Property 'on' does not exist on type 'CodeMirror'. -node_modules/chrome-devtools-frontend/front_end/source_frame/SourcesTextEditor.js(27,23): error TS2339: Property 'on' does not exist on type 'CodeMirror'. -node_modules/chrome-devtools-frontend/front_end/source_frame/SourcesTextEditor.js(28,23): error TS2339: Property 'on' does not exist on type 'CodeMirror'. -node_modules/chrome-devtools-frontend/front_end/source_frame/SourcesTextEditor.js(31,23): error TS2339: Property 'addKeyMap' does not exist on type 'CodeMirror'. -node_modules/chrome-devtools-frontend/front_end/source_frame/SourcesTextEditor.js(36,23): error TS2339: Property 'setOption' does not exist on type 'CodeMirror'. -node_modules/chrome-devtools-frontend/front_end/source_frame/SourcesTextEditor.js(38,23): error TS2339: Property 'setOption' does not exist on type 'CodeMirror'. -node_modules/chrome-devtools-frontend/front_end/source_frame/SourcesTextEditor.js(39,23): error TS2339: Property 'setOption' does not exist on type 'CodeMirror'. node_modules/chrome-devtools-frontend/front_end/source_frame/SourcesTextEditor.js(45,12): error TS2339: Property '_isHandlingMouseDownEvent' does not exist on type 'SourcesTextEditor'. node_modules/chrome-devtools-frontend/front_end/source_frame/SourcesTextEditor.js(54,20): error TS2694: Namespace 'UI' has no exported member 'AutocompleteConfig'. node_modules/chrome-devtools-frontend/front_end/source_frame/SourcesTextEditor.js(90,14): error TS2403: Subsequent variable declarations must have the same type. Variable 'i' must be of type 'number', but here has type 'string'. node_modules/chrome-devtools-frontend/front_end/source_frame/SourcesTextEditor.js(93,29): error TS2345: Argument of type 'number' is not assignable to parameter of type 'string'. node_modules/chrome-devtools-frontend/front_end/source_frame/SourcesTextEditor.js(134,12): error TS2339: Property '_tokenHighlighter' does not exist on type 'CodeMirrorTextEditor'. -node_modules/chrome-devtools-frontend/front_end/source_frame/SourcesTextEditor.js(140,23): error TS2339: Property 'operation' does not exist on type 'CodeMirror'. -node_modules/chrome-devtools-frontend/front_end/source_frame/SourcesTextEditor.js(144,23): error TS2339: Property 'operation' does not exist on type 'CodeMirror'. -node_modules/chrome-devtools-frontend/front_end/source_frame/SourcesTextEditor.js(168,30): error TS2339: Property 'markText' does not exist on type 'CodeMirror'. -node_modules/chrome-devtools-frontend/front_end/source_frame/SourcesTextEditor.js(185,23): error TS2339: Property 'setOption' does not exist on type 'CodeMirror'. -node_modules/chrome-devtools-frontend/front_end/source_frame/SourcesTextEditor.js(196,23): error TS2339: Property 'clearGutter' does not exist on type 'CodeMirror'. -node_modules/chrome-devtools-frontend/front_end/source_frame/SourcesTextEditor.js(198,23): error TS2339: Property 'setOption' does not exist on type 'CodeMirror'. -node_modules/chrome-devtools-frontend/front_end/source_frame/SourcesTextEditor.js(209,23): error TS2339: Property 'setGutterMarker' does not exist on type 'CodeMirror'. -node_modules/chrome-devtools-frontend/front_end/source_frame/SourcesTextEditor.js(219,45): error TS2339: Property 'getLineHandle' does not exist on type 'CodeMirror'. -node_modules/chrome-devtools-frontend/front_end/source_frame/SourcesTextEditor.js(224,23): error TS2339: Property 'addLineClass' does not exist on type 'CodeMirror'. -node_modules/chrome-devtools-frontend/front_end/source_frame/SourcesTextEditor.js(228,44): error TS2339: Property 'getLine' does not exist on type 'CodeMirror'. -node_modules/chrome-devtools-frontend/front_end/source_frame/SourcesTextEditor.js(237,37): error TS2339: Property 'getLine' does not exist on type 'CodeMirror'. -node_modules/chrome-devtools-frontend/front_end/source_frame/SourcesTextEditor.js(239,55): error TS2339: Property 'markText' does not exist on type 'CodeMirror'. -node_modules/chrome-devtools-frontend/front_end/source_frame/SourcesTextEditor.js(245,25): error TS2339: Property 'addLineClass' does not exist on type 'CodeMirror'. -node_modules/chrome-devtools-frontend/front_end/source_frame/SourcesTextEditor.js(250,25): error TS2339: Property 'removeLineClass' does not exist on type 'CodeMirror'. -node_modules/chrome-devtools-frontend/front_end/source_frame/SourcesTextEditor.js(258,25): error TS2339: Property 'removeLineClass' does not exist on type 'CodeMirror'. -node_modules/chrome-devtools-frontend/front_end/source_frame/SourcesTextEditor.js(276,40): error TS2339: Property 'getLineHandle' does not exist on type 'CodeMirror'. -node_modules/chrome-devtools-frontend/front_end/source_frame/SourcesTextEditor.js(281,25): error TS2339: Property 'addLineClass' does not exist on type 'CodeMirror'. -node_modules/chrome-devtools-frontend/front_end/source_frame/SourcesTextEditor.js(282,25): error TS2339: Property 'addLineClass' does not exist on type 'CodeMirror'. -node_modules/chrome-devtools-frontend/front_end/source_frame/SourcesTextEditor.js(284,25): error TS2339: Property 'removeLineClass' does not exist on type 'CodeMirror'. -node_modules/chrome-devtools-frontend/front_end/source_frame/SourcesTextEditor.js(285,25): error TS2339: Property 'removeLineClass' does not exist on type 'CodeMirror'. -node_modules/chrome-devtools-frontend/front_end/source_frame/SourcesTextEditor.js(295,38): error TS2339: Property 'lineInfo' does not exist on type 'CodeMirror'. -node_modules/chrome-devtools-frontend/front_end/source_frame/SourcesTextEditor.js(360,25): error TS2339: Property 'setOption' does not exist on type 'CodeMirror'. -node_modules/chrome-devtools-frontend/front_end/source_frame/SourcesTextEditor.js(361,25): error TS2339: Property 'setOption' does not exist on type 'CodeMirror'. -node_modules/chrome-devtools-frontend/front_end/source_frame/SourcesTextEditor.js(363,25): error TS2339: Property 'setOption' does not exist on type 'CodeMirror'. -node_modules/chrome-devtools-frontend/front_end/source_frame/SourcesTextEditor.js(364,25): error TS2339: Property 'setOption' does not exist on type 'CodeMirror'. -node_modules/chrome-devtools-frontend/front_end/source_frame/SourcesTextEditor.js(373,23): error TS2339: Property 'setOption' does not exist on type 'CodeMirror'. -node_modules/chrome-devtools-frontend/front_end/source_frame/SourcesTextEditor.js(393,27): error TS2339: Property 'replaceRange' does not exist on type 'CodeMirror'. -node_modules/chrome-devtools-frontend/front_end/source_frame/SourcesTextEditor.js(409,25): error TS2339: Property 'operation' does not exist on type 'CodeMirror'. -node_modules/chrome-devtools-frontend/front_end/source_frame/SourcesTextEditor.js(411,35): error TS2339: Property 'getCursor' does not exist on type 'CodeMirror'. -node_modules/chrome-devtools-frontend/front_end/source_frame/SourcesTextEditor.js(412,33): error TS2339: Property 'getCursor' does not exist on type 'CodeMirror'. -node_modules/chrome-devtools-frontend/front_end/source_frame/SourcesTextEditor.js(428,47): error TS2339: Property 'lineAtHeight' does not exist on type 'CodeMirror'. -node_modules/chrome-devtools-frontend/front_end/source_frame/SourcesTextEditor.js(428,78): error TS2339: Property 'getScrollInfo' does not exist on type 'CodeMirror'. +node_modules/chrome-devtools-frontend/front_end/source_frame/SourcesTextEditor.js(237,57): error TS2339: Property 'length' does not exist on type 'void'. +node_modules/chrome-devtools-frontend/front_end/source_frame/SourcesTextEditor.js(262,9): error TS1345: An expression of type 'void' cannot be tested for truthiness +node_modules/chrome-devtools-frontend/front_end/source_frame/SourcesTextEditor.js(263,37): error TS2339: Property 'clear' does not exist on type 'void'. +node_modules/chrome-devtools-frontend/front_end/source_frame/SourcesTextEditor.js(296,30): error TS2339: Property 'wrapClass' does not exist on type 'void'. +node_modules/chrome-devtools-frontend/front_end/source_frame/SourcesTextEditor.js(414,99): error TS2345: Argument of type 'void' is not assignable to parameter of type 'Pos'. node_modules/chrome-devtools-frontend/front_end/source_frame/SourcesTextEditor.js(445,15): error TS2339: Property '_isHandlingMouseDownEvent' does not exist on type 'SourcesTextEditor'. node_modules/chrome-devtools-frontend/front_end/source_frame/SourcesTextEditor.js(561,13): error TS2339: Property '_codeMirrorWhitespaceStyleInjected' does not exist on type 'Document'. node_modules/chrome-devtools-frontend/front_end/source_frame/SourcesTextEditor.js(563,9): error TS2339: Property '_codeMirrorWhitespaceStyleInjected' does not exist on type 'Document'. @@ -10966,17 +10902,22 @@ node_modules/chrome-devtools-frontend/front_end/source_frame/SourcesTextEditor.j node_modules/chrome-devtools-frontend/front_end/source_frame/SourcesTextEditor.js(594,31): error TS2339: Property 'GutterClickEventData' does not exist on type 'typeof SourcesTextEditor'. node_modules/chrome-devtools-frontend/front_end/source_frame/SourcesTextEditor.js(614,15): error TS2355: A function whose declared type is neither 'void' nor 'any' must return a value. node_modules/chrome-devtools-frontend/front_end/source_frame/SourcesTextEditor.js(622,15): error TS2355: A function whose declared type is neither 'void' nor 'any' must return a value. -node_modules/chrome-devtools-frontend/front_end/source_frame/SourcesTextEditor.js(631,14): error TS2339: Property 'operation' does not exist on type 'CodeMirror'. -node_modules/chrome-devtools-frontend/front_end/source_frame/SourcesTextEditor.js(764,24): error TS2339: Property 'removeLineClass' does not exist on type 'CodeMirror'. -node_modules/chrome-devtools-frontend/front_end/source_frame/SourcesTextEditor.js(769,24): error TS2339: Property 'addLineClass' does not exist on type 'CodeMirror'. -node_modules/chrome-devtools-frontend/front_end/source_frame/SourcesTextEditor.js(780,51): error TS2339: Property 'markText' does not exist on type 'CodeMirror'. -node_modules/chrome-devtools-frontend/front_end/source_frame/SourcesTextEditor.js(795,24): error TS2339: Property 'removeLineClass' does not exist on type 'CodeMirror'. -node_modules/chrome-devtools-frontend/front_end/source_frame/SourcesTextEditor.js(797,43): error TS2339: Property 'getCursor' does not exist on type 'CodeMirror'. -node_modules/chrome-devtools-frontend/front_end/source_frame/SourcesTextEditor.js(798,41): error TS2339: Property 'getCursor' does not exist on type 'CodeMirror'. -node_modules/chrome-devtools-frontend/front_end/source_frame/SourcesTextEditor.js(803,39): error TS2339: Property 'getSelections' does not exist on type 'CodeMirror'. -node_modules/chrome-devtools-frontend/front_end/source_frame/SourcesTextEditor.js(809,26): error TS2339: Property 'addLineClass' does not exist on type 'CodeMirror'. -node_modules/chrome-devtools-frontend/front_end/source_frame/SourcesTextEditor.js(821,33): error TS2339: Property 'getLine' does not exist on type 'CodeMirror'. -node_modules/chrome-devtools-frontend/front_end/source_frame/SourcesTextEditor.js(829,24): error TS2339: Property 'removeOverlay' does not exist on type 'CodeMirror'. +node_modules/chrome-devtools-frontend/front_end/source_frame/SourcesTextEditor.js(759,9): error TS1345: An expression of type 'void' cannot be tested for truthiness +node_modules/chrome-devtools-frontend/front_end/source_frame/SourcesTextEditor.js(760,32): error TS2339: Property 'clear' does not exist on type 'void'. +node_modules/chrome-devtools-frontend/front_end/source_frame/SourcesTextEditor.js(799,24): error TS2339: Property 'line' does not exist on type 'void'. +node_modules/chrome-devtools-frontend/front_end/source_frame/SourcesTextEditor.js(799,46): error TS2339: Property 'line' does not exist on type 'void'. +node_modules/chrome-devtools-frontend/front_end/source_frame/SourcesTextEditor.js(801,24): error TS2339: Property 'ch' does not exist on type 'void'. +node_modules/chrome-devtools-frontend/front_end/source_frame/SourcesTextEditor.js(801,44): error TS2339: Property 'ch' does not exist on type 'void'. +node_modules/chrome-devtools-frontend/front_end/source_frame/SourcesTextEditor.js(804,20): error TS2339: Property 'length' does not exist on type 'void'. +node_modules/chrome-devtools-frontend/front_end/source_frame/SourcesTextEditor.js(807,51): error TS2339: Property 'line' does not exist on type 'void'. +node_modules/chrome-devtools-frontend/front_end/source_frame/SourcesTextEditor.js(807,72): error TS2339: Property 'ch' does not exist on type 'void'. +node_modules/chrome-devtools-frontend/front_end/source_frame/SourcesTextEditor.js(807,89): error TS2339: Property 'ch' does not exist on type 'void'. +node_modules/chrome-devtools-frontend/front_end/source_frame/SourcesTextEditor.js(808,11): error TS1345: An expression of type 'void' cannot be tested for truthiness +node_modules/chrome-devtools-frontend/front_end/source_frame/SourcesTextEditor.js(809,54): error TS2339: Property 'line' does not exist on type 'void'. +node_modules/chrome-devtools-frontend/front_end/source_frame/SourcesTextEditor.js(810,93): error TS2345: Argument of type 'void' is not assignable to parameter of type 'Pos'. +node_modules/chrome-devtools-frontend/front_end/source_frame/SourcesTextEditor.js(822,79): error TS2339: Property 'charAt' does not exist on type 'void'. +node_modules/chrome-devtools-frontend/front_end/source_frame/SourcesTextEditor.js(823,41): error TS2339: Property 'length' does not exist on type 'void'. +node_modules/chrome-devtools-frontend/front_end/source_frame/SourcesTextEditor.js(823,88): error TS2339: Property 'charAt' does not exist on type 'void'. node_modules/chrome-devtools-frontend/front_end/source_frame/SourcesTextEditor.js(839,9): error TS2367: This condition will always return 'false' since the types 'void' and 'number' have no overlap. node_modules/chrome-devtools-frontend/front_end/source_frame/SourcesTextEditor.js(854,9): error TS1345: An expression of type 'void' cannot be tested for truthiness node_modules/chrome-devtools-frontend/front_end/source_frame/SourcesTextEditor.js(862,12): error TS1345: An expression of type 'void' cannot be tested for truthiness @@ -10989,7 +10930,6 @@ node_modules/chrome-devtools-frontend/front_end/source_frame/SourcesTextEditor.j node_modules/chrome-devtools-frontend/front_end/source_frame/SourcesTextEditor.js(878,12): error TS1345: An expression of type 'void' cannot be tested for truthiness node_modules/chrome-devtools-frontend/front_end/source_frame/SourcesTextEditor.js(878,71): error TS2367: This condition will always return 'true' since the types 'void' and 'string' have no overlap. node_modules/chrome-devtools-frontend/front_end/source_frame/SourcesTextEditor.js(882,14): error TS7014: Function type, which lacks return-type annotation, implicitly has an 'any' return type. -node_modules/chrome-devtools-frontend/front_end/source_frame/SourcesTextEditor.js(887,22): error TS2339: Property 'addOverlay' does not exist on type 'CodeMirror'. node_modules/chrome-devtools-frontend/front_end/source_frame/XMLView.js(39,35): error TS2555: Expected at least 2 arguments, but got 1. node_modules/chrome-devtools-frontend/front_end/source_frame/XMLView.js(42,53): error TS2345: Argument of type '0' is not assignable to parameter of type 'string'. node_modules/chrome-devtools-frontend/front_end/source_frame/XMLView.js(54,59): error TS2345: Argument of type 'string' is not assignable to parameter of type 'SupportedType'. @@ -11119,12 +11059,13 @@ node_modules/chrome-devtools-frontend/front_end/sources/JavaScriptBreakpointsSid node_modules/chrome-devtools-frontend/front_end/sources/JavaScriptBreakpointsSidebarPane.js(34,34): error TS2555: Expected at least 2 arguments, but got 1. node_modules/chrome-devtools-frontend/front_end/sources/JavaScriptBreakpointsSidebarPane.js(41,27): error TS2339: Property 'removeChildren' does not exist on type 'Element'. node_modules/chrome-devtools-frontend/front_end/sources/JavaScriptBreakpointsSidebarPane.js(42,47): error TS2339: Property 'createChild' does not exist on type 'Element'. -node_modules/chrome-devtools-frontend/front_end/sources/JavaScriptBreakpointsSidebarPane.js(53,24): error TS2339: Property 'set' does not exist on type 'Multimap'. -node_modules/chrome-devtools-frontend/front_end/sources/JavaScriptBreakpointsSidebarPane.js(64,45): error TS2339: Property 'keysArray' does not exist on type 'Multimap'. +node_modules/chrome-devtools-frontend/front_end/sources/JavaScriptBreakpointsSidebarPane.js(53,28): error TS2345: Argument of type 'string' is not assignable to parameter of type 'K'. node_modules/chrome-devtools-frontend/front_end/sources/JavaScriptBreakpointsSidebarPane.js(66,35): error TS2339: Property 'createChild' does not exist on type 'Element'. node_modules/chrome-devtools-frontend/front_end/sources/JavaScriptBreakpointsSidebarPane.js(73,36): error TS2339: Property 'createChild' does not exist on type 'ChildNode'. -node_modules/chrome-devtools-frontend/front_end/sources/JavaScriptBreakpointsSidebarPane.js(77,51): error TS2339: Property 'get' does not exist on type 'Multimap'. -node_modules/chrome-devtools-frontend/front_end/sources/JavaScriptBreakpointsSidebarPane.js(78,11): error TS2403: Subsequent variable declarations must have the same type. Variable 'uiLocation' must be of type 'UILocation', but here has type 'any'. +node_modules/chrome-devtools-frontend/front_end/sources/JavaScriptBreakpointsSidebarPane.js(78,37): error TS2339: Property 'uiLocation' does not exist on type 'V'. +node_modules/chrome-devtools-frontend/front_end/sources/JavaScriptBreakpointsSidebarPane.js(80,71): error TS2339: Property 'uiLocation' does not exist on type 'V'. +node_modules/chrome-devtools-frontend/front_end/sources/JavaScriptBreakpointsSidebarPane.js(81,60): error TS2339: Property 'breakpoint' does not exist on type 'V'. +node_modules/chrome-devtools-frontend/front_end/sources/JavaScriptBreakpointsSidebarPane.js(82,62): error TS2339: Property 'breakpoint' does not exist on type 'V'. node_modules/chrome-devtools-frontend/front_end/sources/JavaScriptBreakpointsSidebarPane.js(87,7): error TS2322: Type 'Node' is not assignable to type 'ChildNode'. node_modules/chrome-devtools-frontend/front_end/sources/JavaScriptBreakpointsSidebarPane.js(92,7): error TS2322: Type 'Node' is not assignable to type 'ChildNode'. node_modules/chrome-devtools-frontend/front_end/sources/JavaScriptBreakpointsSidebarPane.js(119,5): error TS2322: Type 'Promise' is not assignable to type 'Promise'. @@ -11192,8 +11133,6 @@ node_modules/chrome-devtools-frontend/front_end/sources/JavaScriptSourceFrame.js node_modules/chrome-devtools-frontend/front_end/sources/JavaScriptSourceFrame.js(969,32): error TS2339: Property '__nameToToken' does not exist on type 'Element'. node_modules/chrome-devtools-frontend/front_end/sources/JavaScriptSourceFrame.js(969,65): error TS2339: Property '__nameToToken' does not exist on type 'Element'. node_modules/chrome-devtools-frontend/front_end/sources/JavaScriptSourceFrame.js(974,49): error TS2339: Property '__nameToToken' does not exist on type 'Element'. -node_modules/chrome-devtools-frontend/front_end/sources/JavaScriptSourceFrame.js(1036,67): error TS2339: Property 'lineNumber' does not exist on type '{ lineNumber: number; columnNumber: number; } | {}'. - Property 'lineNumber' does not exist on type '{}'. node_modules/chrome-devtools-frontend/front_end/sources/JavaScriptSourceFrame.js(1150,11): error TS2339: Property 'consume' does not exist on type 'Event'. node_modules/chrome-devtools-frontend/front_end/sources/JavaScriptSourceFrame.js(1152,17): error TS2339: Property 'shiftKey' does not exist on type 'Event'. node_modules/chrome-devtools-frontend/front_end/sources/JavaScriptSourceFrame.js(1169,11): error TS2339: Property 'consume' does not exist on type 'Event'. @@ -11203,7 +11142,7 @@ node_modules/chrome-devtools-frontend/front_end/sources/JavaScriptSourceFrame.js node_modules/chrome-devtools-frontend/front_end/sources/JavaScriptSourceFrame.js(1190,22): error TS2694: Namespace 'Common' has no exported member 'Event'. node_modules/chrome-devtools-frontend/front_end/sources/JavaScriptSourceFrame.js(1201,56): error TS2339: Property 'valuesArray' does not exist on type 'Map'. node_modules/chrome-devtools-frontend/front_end/sources/JavaScriptSourceFrame.js(1210,22): error TS2694: Namespace 'Common' has no exported member 'Event'. -node_modules/chrome-devtools-frontend/front_end/sources/JavaScriptSourceFrame.js(1270,16): error TS2403: Subsequent variable declarations must have the same type. Variable 'location' must be of type '{ lineNumber: number; columnNumber: number; }', but here has type 'UILocation'. +node_modules/chrome-devtools-frontend/front_end/sources/JavaScriptSourceFrame.js(1270,16): error TS2403: Subsequent variable declarations must have the same type. Variable 'location' must be of type 'any', but here has type 'UILocation'. node_modules/chrome-devtools-frontend/front_end/sources/JavaScriptSourceFrame.js(1286,22): error TS2694: Namespace 'Common' has no exported member 'Event'. node_modules/chrome-devtools-frontend/front_end/sources/JavaScriptSourceFrame.js(1326,60): error TS2339: Property 'valuesArray' does not exist on type 'Set'. node_modules/chrome-devtools-frontend/front_end/sources/JavaScriptSourceFrame.js(1400,31): error TS2555: Expected at least 2 arguments, but got 1. @@ -11225,28 +11164,31 @@ node_modules/chrome-devtools-frontend/front_end/sources/NavigatorView.js(145,21) node_modules/chrome-devtools-frontend/front_end/sources/NavigatorView.js(167,22): error TS2694: Namespace 'Common' has no exported member 'Event'. node_modules/chrome-devtools-frontend/front_end/sources/NavigatorView.js(175,22): error TS2694: Namespace 'Common' has no exported member 'Event'. node_modules/chrome-devtools-frontend/front_end/sources/NavigatorView.js(183,22): error TS2694: Namespace 'Common' has no exported member 'Event'. -node_modules/chrome-devtools-frontend/front_end/sources/NavigatorView.js(189,48): error TS2339: Property 'get' does not exist on type 'Multimap'. -node_modules/chrome-devtools-frontend/front_end/sources/NavigatorView.js(192,51): error TS2339: Property 'get' does not exist on type 'Multimap'. +node_modules/chrome-devtools-frontend/front_end/sources/NavigatorView.js(189,52): error TS2345: Argument of type 'UISourceCode' is not assignable to parameter of type 'K'. +node_modules/chrome-devtools-frontend/front_end/sources/NavigatorView.js(191,19): error TS2339: Property 'updateTitle' does not exist on type 'V'. +node_modules/chrome-devtools-frontend/front_end/sources/NavigatorView.js(192,55): error TS2345: Argument of type 'UISourceCode' is not assignable to parameter of type 'K'. +node_modules/chrome-devtools-frontend/front_end/sources/NavigatorView.js(194,22): error TS2339: Property 'updateTitle' does not exist on type 'V'. node_modules/chrome-devtools-frontend/front_end/sources/NavigatorView.js(212,22): error TS2339: Property 'updateTitle' does not exist on type 'NavigatorTreeNode'. node_modules/chrome-devtools-frontend/front_end/sources/NavigatorView.js(262,22): error TS2694: Namespace 'Common' has no exported member 'Event'. node_modules/chrome-devtools-frontend/front_end/sources/NavigatorView.js(275,22): error TS2694: Namespace 'Common' has no exported member 'Event'. -node_modules/chrome-devtools-frontend/front_end/sources/NavigatorView.js(283,51): error TS2339: Property 'get' does not exist on type 'Multimap'. -node_modules/chrome-devtools-frontend/front_end/sources/NavigatorView.js(336,29): error TS2339: Property 'set' does not exist on type 'Multimap'. +node_modules/chrome-devtools-frontend/front_end/sources/NavigatorView.js(283,55): error TS2345: Argument of type 'UISourceCode' is not assignable to parameter of type 'K'. +node_modules/chrome-devtools-frontend/front_end/sources/NavigatorView.js(336,33): error TS2345: Argument of type 'UISourceCode' is not assignable to parameter of type 'K'. node_modules/chrome-devtools-frontend/front_end/sources/NavigatorView.js(346,22): error TS2694: Namespace 'Common' has no exported member 'Event'. node_modules/chrome-devtools-frontend/front_end/sources/NavigatorView.js(354,22): error TS2694: Namespace 'Common' has no exported member 'Event'. node_modules/chrome-devtools-frontend/front_end/sources/NavigatorView.js(388,58): error TS2339: Property 'reverse' does not exist on type 'string'. node_modules/chrome-devtools-frontend/front_end/sources/NavigatorView.js(499,29): error TS2339: Property '_boostOrder' does not exist on type 'TreeElement'. node_modules/chrome-devtools-frontend/front_end/sources/NavigatorView.js(527,28): error TS2339: Property '_boostOrder' does not exist on type 'TreeElement'. node_modules/chrome-devtools-frontend/front_end/sources/NavigatorView.js(578,14): error TS2555: Expected at least 2 arguments, but got 1. -node_modules/chrome-devtools-frontend/front_end/sources/NavigatorView.js(592,41): error TS2339: Property 'get' does not exist on type 'Multimap'. -node_modules/chrome-devtools-frontend/front_end/sources/NavigatorView.js(623,41): error TS2339: Property 'get' does not exist on type 'Multimap'. -node_modules/chrome-devtools-frontend/front_end/sources/NavigatorView.js(633,29): error TS2339: Property 'delete' does not exist on type 'Multimap'. +node_modules/chrome-devtools-frontend/front_end/sources/NavigatorView.js(592,45): error TS2345: Argument of type 'UISourceCode' is not assignable to parameter of type 'K'. +node_modules/chrome-devtools-frontend/front_end/sources/NavigatorView.js(593,22): error TS2339: Property 'firstValue' does not exist on type 'Set'. +node_modules/chrome-devtools-frontend/front_end/sources/NavigatorView.js(623,45): error TS2345: Argument of type 'UISourceCode' is not assignable to parameter of type 'K'. +node_modules/chrome-devtools-frontend/front_end/sources/NavigatorView.js(625,36): error TS2345: Argument of type 'V' is not assignable to parameter of type 'NavigatorUISourceCodeTreeNode'. +node_modules/chrome-devtools-frontend/front_end/sources/NavigatorView.js(633,36): error TS2345: Argument of type 'UISourceCode' is not assignable to parameter of type 'K'. node_modules/chrome-devtools-frontend/front_end/sources/NavigatorView.js(638,27): error TS2339: Property 'parent' does not exist on type 'NavigatorUISourceCodeTreeNode'. node_modules/chrome-devtools-frontend/front_end/sources/NavigatorView.js(643,25): error TS2339: Property 'parent' does not exist on type 'NavigatorUISourceCodeTreeNode'. node_modules/chrome-devtools-frontend/front_end/sources/NavigatorView.js(655,93): error TS2339: Property '_folderPath' does not exist on type '(NavigatorUISourceCodeTreeNode & NavigatorGroupTreeNode) | (NavigatorUISourceCodeTreeNode & NavigatorFolderTreeNode)'. Property '_folderPath' does not exist on type 'NavigatorUISourceCodeTreeNode & NavigatorGroupTreeNode'. -node_modules/chrome-devtools-frontend/front_end/sources/NavigatorView.js(663,46): error TS2339: Property 'valuesArray' does not exist on type 'Multimap'. -node_modules/chrome-devtools-frontend/front_end/sources/NavigatorView.js(667,29): error TS2339: Property 'clear' does not exist on type 'Multimap'. +node_modules/chrome-devtools-frontend/front_end/sources/NavigatorView.js(664,12): error TS2339: Property 'dispose' does not exist on type 'V'. node_modules/chrome-devtools-frontend/front_end/sources/NavigatorView.js(705,40): error TS2555: Expected at least 2 arguments, but got 1. node_modules/chrome-devtools-frontend/front_end/sources/NavigatorView.js(717,39): error TS2555: Expected at least 2 arguments, but got 1. node_modules/chrome-devtools-frontend/front_end/sources/NavigatorView.js(734,11): error TS2555: Expected at least 2 arguments, but got 1. @@ -11482,7 +11424,6 @@ node_modules/chrome-devtools-frontend/front_end/sources/UISourceCodeFrame.js(443 node_modules/chrome-devtools-frontend/front_end/sources/UISourceCodeFrame.js(461,22): error TS2694: Namespace 'Common' has no exported member 'Event'. node_modules/chrome-devtools-frontend/front_end/sources/UISourceCodeFrame.js(469,22): error TS2694: Namespace 'Common' has no exported member 'Event'. node_modules/chrome-devtools-frontend/front_end/sources/UISourceCodeFrame.js(483,10): error TS2339: Property 'runtime' does not exist on type 'Window'. -node_modules/chrome-devtools-frontend/front_end/sources/UISourceCodeFrame.js(488,40): error TS2339: Property 'operation' does not exist on type 'CodeMirror'. node_modules/chrome-devtools-frontend/front_end/sources/UISourceCodeFrame.js(496,32): error TS2339: Property 'runtime' does not exist on type 'Window'. node_modules/chrome-devtools-frontend/front_end/sources/UISourceCodeFrame.js(511,24): error TS2339: Property 'pushAll' does not exist on type 'ToolbarItem[]'. node_modules/chrome-devtools-frontend/front_end/sources/UISourceCodeFrame.js(512,25): error TS2339: Property 'pushAll' does not exist on type 'any[]'. @@ -11791,16 +11732,10 @@ node_modules/chrome-devtools-frontend/front_end/text_editor/CodeMirrorTextEditor node_modules/chrome-devtools-frontend/front_end/text_editor/CodeMirrorTextEditor.js(47,35): error TS2339: Property 'CodeMirror' does not exist on type 'Window'. node_modules/chrome-devtools-frontend/front_end/text_editor/CodeMirrorTextEditor.js(165,18): error TS2339: Property 'style' does not exist on type 'Element'. node_modules/chrome-devtools-frontend/front_end/text_editor/CodeMirrorTextEditor.js(169,67): error TS2694: Namespace 'TextEditor.CodeMirrorTextEditor' has no exported member 'Decoration'. -node_modules/chrome-devtools-frontend/front_end/text_editor/CodeMirrorTextEditor.js(198,45): error TS2339: Property '_codeMirrorTextEditor' does not exist on type 'CodeMirror'. -node_modules/chrome-devtools-frontend/front_end/text_editor/CodeMirrorTextEditor.js(207,16): error TS2339: Property '_codeMirrorTextEditor' does not exist on type 'CodeMirror'. -node_modules/chrome-devtools-frontend/front_end/text_editor/CodeMirrorTextEditor.js(214,16): error TS2339: Property '_codeMirrorTextEditor' does not exist on type 'CodeMirror'. -node_modules/chrome-devtools-frontend/front_end/text_editor/CodeMirrorTextEditor.js(222,16): error TS2339: Property '_codeMirrorTextEditor' does not exist on type 'CodeMirror'. -node_modules/chrome-devtools-frontend/front_end/text_editor/CodeMirrorTextEditor.js(230,16): error TS2339: Property '_codeMirrorTextEditor' does not exist on type 'CodeMirror'. node_modules/chrome-devtools-frontend/front_end/text_editor/CodeMirrorTextEditor.js(251,22): error TS2339: Property 'name' does not exist on type 'void'. node_modules/chrome-devtools-frontend/front_end/text_editor/CodeMirrorTextEditor.js(252,22): error TS2339: Property 'token' does not exist on type 'void'. node_modules/chrome-devtools-frontend/front_end/text_editor/CodeMirrorTextEditor.js(252,70): error TS2339: Property 'token' does not exist on type 'void'. node_modules/chrome-devtools-frontend/front_end/text_editor/CodeMirrorTextEditor.js(270,27): error TS2339: Property 'runtime' does not exist on type 'Window'. -node_modules/chrome-devtools-frontend/front_end/text_editor/CodeMirrorTextEditor.js(356,16): error TS2339: Property 'addKeyMap' does not exist on type 'CodeMirror'. node_modules/chrome-devtools-frontend/front_end/text_editor/CodeMirrorTextEditor.js(395,29): error TS2339: Property 'constrain' does not exist on type 'NumberConstructor'. node_modules/chrome-devtools-frontend/front_end/text_editor/CodeMirrorTextEditor.js(449,60): error TS2339: Property 'constrain' does not exist on type 'NumberConstructor'. node_modules/chrome-devtools-frontend/front_end/text_editor/CodeMirrorTextEditor.js(557,9): error TS2339: Property 'consume' does not exist on type 'Event'. @@ -11809,44 +11744,32 @@ node_modules/chrome-devtools-frontend/front_end/text_editor/CodeMirrorTextEditor node_modules/chrome-devtools-frontend/front_end/text_editor/CodeMirrorTextEditor.js(602,30): error TS2339: Property 'isSelfOrDescendant' does not exist on type 'Element'. node_modules/chrome-devtools-frontend/front_end/text_editor/CodeMirrorTextEditor.js(735,14): error TS7014: Function type, which lacks return-type annotation, implicitly has an 'any' return type. node_modules/chrome-devtools-frontend/front_end/text_editor/CodeMirrorTextEditor.js(796,14): error TS7014: Function type, which lacks return-type annotation, implicitly has an 'any' return type. -node_modules/chrome-devtools-frontend/front_end/text_editor/CodeMirrorTextEditor.js(842,23): error TS2339: Property 'set' does not exist on type 'Multimap'. +node_modules/chrome-devtools-frontend/front_end/text_editor/CodeMirrorTextEditor.js(842,27): error TS2345: Argument of type 'number' is not assignable to parameter of type 'K'. node_modules/chrome-devtools-frontend/front_end/text_editor/CodeMirrorTextEditor.js(855,13): error TS2339: Property 'style' does not exist on type 'Element'. node_modules/chrome-devtools-frontend/front_end/text_editor/CodeMirrorTextEditor.js(856,13): error TS2339: Property 'style' does not exist on type 'Element'. -node_modules/chrome-devtools-frontend/front_end/text_editor/CodeMirrorTextEditor.js(863,23): error TS2339: Property 'get' does not exist on type 'Multimap'. +node_modules/chrome-devtools-frontend/front_end/text_editor/CodeMirrorTextEditor.js(863,27): error TS2345: Argument of type 'number' is not assignable to parameter of type 'K'. node_modules/chrome-devtools-frontend/front_end/text_editor/CodeMirrorTextEditor.js(866,49): error TS2694: Namespace 'TextEditor.CodeMirrorTextEditor' has no exported member 'Decoration'. -node_modules/chrome-devtools-frontend/front_end/text_editor/CodeMirrorTextEditor.js(879,23): error TS2339: Property 'get' does not exist on type 'Multimap'. +node_modules/chrome-devtools-frontend/front_end/text_editor/CodeMirrorTextEditor.js(879,27): error TS2345: Argument of type 'number' is not assignable to parameter of type 'K'. node_modules/chrome-devtools-frontend/front_end/text_editor/CodeMirrorTextEditor.js(883,49): error TS2694: Namespace 'TextEditor.CodeMirrorTextEditor' has no exported member 'Decoration'. -node_modules/chrome-devtools-frontend/front_end/text_editor/CodeMirrorTextEditor.js(889,25): error TS2339: Property 'delete' does not exist on type 'Multimap'. +node_modules/chrome-devtools-frontend/front_end/text_editor/CodeMirrorTextEditor.js(889,32): error TS2345: Argument of type 'number' is not assignable to parameter of type 'K'. node_modules/chrome-devtools-frontend/front_end/text_editor/CodeMirrorTextEditor.js(899,25): error TS2339: Property 'constrain' does not exist on type 'NumberConstructor'. node_modules/chrome-devtools-frontend/front_end/text_editor/CodeMirrorTextEditor.js(902,27): error TS2339: Property 'constrain' does not exist on type 'NumberConstructor'. node_modules/chrome-devtools-frontend/front_end/text_editor/CodeMirrorTextEditor.js(955,5): error TS2322: Type 'string' is not assignable to type 'number'. node_modules/chrome-devtools-frontend/front_end/text_editor/CodeMirrorTextEditor.js(956,18): error TS2339: Property 'style' does not exist on type 'Element'. node_modules/chrome-devtools-frontend/front_end/text_editor/CodeMirrorTextEditor.js(968,62): error TS2339: Property 'offsetTop' does not exist on type 'Element'. node_modules/chrome-devtools-frontend/front_end/text_editor/CodeMirrorTextEditor.js(1038,34): error TS2694: Namespace 'CodeMirror' has no exported member 'ChangeObject'. -node_modules/chrome-devtools-frontend/front_end/text_editor/CodeMirrorTextEditor.js(1052,23): error TS2339: Property 'valuesArray' does not exist on type 'Multimap'. -node_modules/chrome-devtools-frontend/front_end/text_editor/CodeMirrorTextEditor.js(1053,23): error TS2339: Property 'clear' does not exist on type 'Multimap'. -node_modules/chrome-devtools-frontend/front_end/text_editor/CodeMirrorTextEditor.js(1261,5): error TS2322: Type 'CodeMirrorPositionHandle' is not assignable to type '{ resolve(): { lineNumber: number; columnNumber: number; }; equal(positionHandle: any): boolean; }'. - Property '_codeMirror' does not exist on type '{ resolve(): { lineNumber: number; columnNumber: number; }; equal(positionHandle: any): boolean; }'. -node_modules/chrome-devtools-frontend/front_end/text_editor/CodeMirrorTextEditor.js(1301,31): error TS2339: Property 'listSelections' does not exist on type 'CodeMirror'. -node_modules/chrome-devtools-frontend/front_end/text_editor/CodeMirrorTextEditor.js(1305,38): error TS2339: Property 'findMatchingBracket' does not exist on type 'CodeMirror'. -node_modules/chrome-devtools-frontend/front_end/text_editor/CodeMirrorTextEditor.js(1313,14): error TS2339: Property 'setSelections' does not exist on type 'CodeMirror'. -node_modules/chrome-devtools-frontend/front_end/text_editor/CodeMirrorTextEditor.js(1320,31): error TS2339: Property 'getScrollInfo' does not exist on type 'CodeMirror'. -node_modules/chrome-devtools-frontend/front_end/text_editor/CodeMirrorTextEditor.js(1321,14): error TS2339: Property 'execCommand' does not exist on type 'CodeMirror'. -node_modules/chrome-devtools-frontend/front_end/text_editor/CodeMirrorTextEditor.js(1322,27): error TS2339: Property 'getCursor' does not exist on type 'CodeMirror'. -node_modules/chrome-devtools-frontend/front_end/text_editor/CodeMirrorTextEditor.js(1323,14): error TS2339: Property '_codeMirrorTextEditor' does not exist on type 'CodeMirror'. -node_modules/chrome-devtools-frontend/front_end/text_editor/CodeMirrorTextEditor.js(1324,43): error TS2339: Property '_codeMirrorTextEditor' does not exist on type 'CodeMirror'. -node_modules/chrome-devtools-frontend/front_end/text_editor/CodeMirrorTextEditor.js(1333,31): error TS2339: Property 'getScrollInfo' does not exist on type 'CodeMirror'. -node_modules/chrome-devtools-frontend/front_end/text_editor/CodeMirrorTextEditor.js(1334,14): error TS2339: Property 'execCommand' does not exist on type 'CodeMirror'. -node_modules/chrome-devtools-frontend/front_end/text_editor/CodeMirrorTextEditor.js(1335,27): error TS2339: Property 'getCursor' does not exist on type 'CodeMirror'. -node_modules/chrome-devtools-frontend/front_end/text_editor/CodeMirrorTextEditor.js(1336,14): error TS2339: Property '_codeMirrorTextEditor' does not exist on type 'CodeMirror'. -node_modules/chrome-devtools-frontend/front_end/text_editor/CodeMirrorTextEditor.js(1337,43): error TS2339: Property '_codeMirrorTextEditor' does not exist on type 'CodeMirror'. -node_modules/chrome-devtools-frontend/front_end/text_editor/CodeMirrorTextEditor.js(1392,35): error TS2339: Property 'getLineHandle' does not exist on type 'CodeMirror'. -node_modules/chrome-devtools-frontend/front_end/text_editor/CodeMirrorTextEditor.js(1401,58): error TS2339: Property 'getLineNumber' does not exist on type 'CodeMirror'. -node_modules/chrome-devtools-frontend/front_end/text_editor/CodeMirrorTextEditor.js(1451,22): error TS2339: Property 'execCommand' does not exist on type 'CodeMirror'. -node_modules/chrome-devtools-frontend/front_end/text_editor/CodeMirrorTextEditor.js(1539,44): error TS2339: Property 'getLine' does not exist on type 'CodeMirror'. -node_modules/chrome-devtools-frontend/front_end/text_editor/CodeMirrorTextEditor.js(1543,22): error TS2339: Property 'eachLine' does not exist on type 'CodeMirror'. -node_modules/chrome-devtools-frontend/front_end/text_editor/CodeMirrorTextEditor.js(1543,69): error TS2339: Property 'lineCount' does not exist on type 'CodeMirror'. -node_modules/chrome-devtools-frontend/front_end/text_editor/CodeMirrorTextEditor.js(1545,22): error TS2339: Property 'eachLine' does not exist on type 'CodeMirror'. +node_modules/chrome-devtools-frontend/front_end/text_editor/CodeMirrorTextEditor.js(1052,104): error TS2339: Property 'widget' does not exist on type 'V'. +node_modules/chrome-devtools-frontend/front_end/text_editor/CodeMirrorTextEditor.js(1302,34): error TS2339: Property 'length' does not exist on type 'void'. +node_modules/chrome-devtools-frontend/front_end/text_editor/CodeMirrorTextEditor.js(1307,9): error TS1345: An expression of type 'void' cannot be tested for truthiness +node_modules/chrome-devtools-frontend/front_end/text_editor/CodeMirrorTextEditor.js(1307,9): error TS1345: An expression of type 'void' cannot be tested for truthiness +node_modules/chrome-devtools-frontend/front_end/text_editor/CodeMirrorTextEditor.js(1307,44): error TS2339: Property 'match' does not exist on type 'void'. +node_modules/chrome-devtools-frontend/front_end/text_editor/CodeMirrorTextEditor.js(1308,64): error TS2339: Property 'from' does not exist on type 'void'. +node_modules/chrome-devtools-frontend/front_end/text_editor/CodeMirrorTextEditor.js(1309,56): error TS2339: Property 'to' does not exist on type 'void'. +node_modules/chrome-devtools-frontend/front_end/text_editor/CodeMirrorTextEditor.js(1309,81): error TS2339: Property 'to' does not exist on type 'void'. +node_modules/chrome-devtools-frontend/front_end/text_editor/CodeMirrorTextEditor.js(1323,60): error TS2339: Property 'line' does not exist on type 'void'. +node_modules/chrome-devtools-frontend/front_end/text_editor/CodeMirrorTextEditor.js(1336,60): error TS2339: Property 'line' does not exist on type 'void'. +node_modules/chrome-devtools-frontend/front_end/text_editor/CodeMirrorTextEditor.js(1404,13): error TS2322: Type 'void' is not assignable to type 'number'. +node_modules/chrome-devtools-frontend/front_end/text_editor/CodeMirrorTextEditor.js(1541,98): error TS2339: Property 'length' does not exist on type 'void'. node_modules/chrome-devtools-frontend/front_end/text_editor/CodeMirrorTextEditor.js(1551,68): error TS2365: Operator '+' cannot be applied to types 'undefined' and 'number'. node_modules/chrome-devtools-frontend/front_end/text_editor/CodeMirrorTextEditor.js(1563,15): error TS2355: A function whose declared type is neither 'void' nor 'any' must return a value. node_modules/chrome-devtools-frontend/front_end/text_editor/CodeMirrorTextEditor.js(1569,15): error TS2355: A function whose declared type is neither 'void' nor 'any' must return a value. @@ -11862,47 +11785,45 @@ node_modules/chrome-devtools-frontend/front_end/text_editor/CodeMirrorTextEditor node_modules/chrome-devtools-frontend/front_end/text_editor/CodeMirrorTextEditor.js(1650,33): error TS2339: Property 'Decoration' does not exist on type 'typeof CodeMirrorTextEditor'. node_modules/chrome-devtools-frontend/front_end/text_editor/CodeMirrorTextEditor.js(1659,29): error TS2694: Namespace 'UI.TextEditor' has no exported member 'Options'. node_modules/chrome-devtools-frontend/front_end/text_editor/CodeMirrorUtils.js(53,24): error TS2694: Namespace 'CodeMirror' has no exported member 'ChangeObject'. -node_modules/chrome-devtools-frontend/front_end/text_editor/CodeMirrorUtils.js(80,14): error TS2339: Property 'eachLine' does not exist on type 'CodeMirror'. node_modules/chrome-devtools-frontend/front_end/text_editor/CodeMirrorUtils.js(146,15): error TS1345: An expression of type 'void' cannot be tested for truthiness node_modules/chrome-devtools-frontend/front_end/text_editor/CodeMirrorUtils.js(147,26): error TS2339: Property 'token' does not exist on type 'void'. node_modules/chrome-devtools-frontend/front_end/text_editor/CodeMirrorUtils.js(149,67): error TS2339: Property 'length' does not exist on type 'void'. node_modules/chrome-devtools-frontend/front_end/text_editor/TextEditorAutocompleteController.js(12,18): error TS2694: Namespace 'UI' has no exported member 'AutocompleteConfig'. -node_modules/chrome-devtools-frontend/front_end/text_editor/TextEditorAutocompleteController.js(26,22): error TS2339: Property 'on' does not exist on type 'CodeMirror'. -node_modules/chrome-devtools-frontend/front_end/text_editor/TextEditorAutocompleteController.js(35,22): error TS2339: Property 'on' does not exist on type 'CodeMirror'. -node_modules/chrome-devtools-frontend/front_end/text_editor/TextEditorAutocompleteController.js(36,22): error TS2339: Property 'on' does not exist on type 'CodeMirror'. -node_modules/chrome-devtools-frontend/front_end/text_editor/TextEditorAutocompleteController.js(37,22): error TS2339: Property 'on' does not exist on type 'CodeMirror'. -node_modules/chrome-devtools-frontend/front_end/text_editor/TextEditorAutocompleteController.js(38,22): error TS2339: Property 'on' does not exist on type 'CodeMirror'. -node_modules/chrome-devtools-frontend/front_end/text_editor/TextEditorAutocompleteController.js(40,24): error TS2339: Property 'on' does not exist on type 'CodeMirror'. -node_modules/chrome-devtools-frontend/front_end/text_editor/TextEditorAutocompleteController.js(42,47): error TS2339: Property 'getValue' does not exist on type 'CodeMirror'. -node_modules/chrome-devtools-frontend/front_end/text_editor/TextEditorAutocompleteController.js(47,22): error TS2339: Property 'off' does not exist on type 'CodeMirror'. -node_modules/chrome-devtools-frontend/front_end/text_editor/TextEditorAutocompleteController.js(49,24): error TS2339: Property 'off' does not exist on type 'CodeMirror'. -node_modules/chrome-devtools-frontend/front_end/text_editor/TextEditorAutocompleteController.js(50,24): error TS2339: Property 'off' does not exist on type 'CodeMirror'. -node_modules/chrome-devtools-frontend/front_end/text_editor/TextEditorAutocompleteController.js(51,24): error TS2339: Property 'off' does not exist on type 'CodeMirror'. -node_modules/chrome-devtools-frontend/front_end/text_editor/TextEditorAutocompleteController.js(52,24): error TS2339: Property 'off' does not exist on type 'CodeMirror'. -node_modules/chrome-devtools-frontend/front_end/text_editor/TextEditorAutocompleteController.js(55,24): error TS2339: Property 'off' does not exist on type 'CodeMirror'. +node_modules/chrome-devtools-frontend/front_end/text_editor/TextEditorAutocompleteController.js(42,30): error TS2345: Argument of type 'void' is not assignable to parameter of type 'string'. node_modules/chrome-devtools-frontend/front_end/text_editor/TextEditorAutocompleteController.js(62,26): error TS2694: Namespace 'CodeMirror' has no exported member 'BeforeChangeObject'. -node_modules/chrome-devtools-frontend/front_end/text_editor/TextEditorAutocompleteController.js(67,48): error TS2339: Property 'getLine' does not exist on type 'CodeMirror'. node_modules/chrome-devtools-frontend/front_end/text_editor/TextEditorAutocompleteController.js(113,40): error TS2694: Namespace 'UI.SuggestBox' has no exported member 'Suggestions'. node_modules/chrome-devtools-frontend/front_end/text_editor/TextEditorAutocompleteController.js(135,34): error TS2694: Namespace 'CodeMirror' has no exported member 'ChangeObject'. -node_modules/chrome-devtools-frontend/front_end/text_editor/TextEditorAutocompleteController.js(151,47): error TS2339: Property 'getLine' does not exist on type 'CodeMirror'. -node_modules/chrome-devtools-frontend/front_end/text_editor/TextEditorAutocompleteController.js(159,35): error TS2339: Property 'getCursor' does not exist on type 'CodeMirror'. -node_modules/chrome-devtools-frontend/front_end/text_editor/TextEditorAutocompleteController.js(198,39): error TS2339: Property 'listSelections' does not exist on type 'CodeMirror'. -node_modules/chrome-devtools-frontend/front_end/text_editor/TextEditorAutocompleteController.js(218,26): error TS2339: Property 'somethingSelected' does not exist on type 'CodeMirror'. -node_modules/chrome-devtools-frontend/front_end/text_editor/TextEditorAutocompleteController.js(223,35): error TS2339: Property 'getCursor' does not exist on type 'CodeMirror'. +node_modules/chrome-devtools-frontend/front_end/text_editor/TextEditorAutocompleteController.js(163,43): error TS2339: Property 'line' does not exist on type 'void'. +node_modules/chrome-devtools-frontend/front_end/text_editor/TextEditorAutocompleteController.js(163,85): error TS2339: Property 'ch' does not exist on type 'void'. +node_modules/chrome-devtools-frontend/front_end/text_editor/TextEditorAutocompleteController.js(168,83): error TS2339: Property 'line' does not exist on type 'void'. +node_modules/chrome-devtools-frontend/front_end/text_editor/TextEditorAutocompleteController.js(169,45): error TS2339: Property 'ch' does not exist on type 'void'. +node_modules/chrome-devtools-frontend/front_end/text_editor/TextEditorAutocompleteController.js(199,20): error TS2339: Property 'length' does not exist on type 'void'. +node_modules/chrome-devtools-frontend/front_end/text_editor/TextEditorAutocompleteController.js(202,36): error TS2339: Property 'length' does not exist on type 'void'. +node_modules/chrome-devtools-frontend/front_end/text_editor/TextEditorAutocompleteController.js(218,9): error TS1345: An expression of type 'void' cannot be tested for truthiness +node_modules/chrome-devtools-frontend/front_end/text_editor/TextEditorAutocompleteController.js(224,56): error TS2339: Property 'line' does not exist on type 'void'. +node_modules/chrome-devtools-frontend/front_end/text_editor/TextEditorAutocompleteController.js(224,69): error TS2339: Property 'ch' does not exist on type 'void'. +node_modules/chrome-devtools-frontend/front_end/text_editor/TextEditorAutocompleteController.js(231,35): error TS2339: Property 'ch' does not exist on type 'void'. node_modules/chrome-devtools-frontend/front_end/text_editor/TextEditorAutocompleteController.js(239,31): error TS2694: Namespace 'UI.SuggestBox' has no exported member 'Suggestions'. -node_modules/chrome-devtools-frontend/front_end/text_editor/TextEditorAutocompleteController.js(275,35): error TS2339: Property 'getCursor' does not exist on type 'CodeMirror'. +node_modules/chrome-devtools-frontend/front_end/text_editor/TextEditorAutocompleteController.js(278,86): error TS2339: Property 'line' does not exist on type 'void'. +node_modules/chrome-devtools-frontend/front_end/text_editor/TextEditorAutocompleteController.js(278,99): error TS2339: Property 'ch' does not exist on type 'void'. +node_modules/chrome-devtools-frontend/front_end/text_editor/TextEditorAutocompleteController.js(286,18): error TS2339: Property 'line' does not exist on type 'void'. +node_modules/chrome-devtools-frontend/front_end/text_editor/TextEditorAutocompleteController.js(286,31): error TS2339: Property 'ch' does not exist on type 'void'. node_modules/chrome-devtools-frontend/front_end/text_editor/TextEditorAutocompleteController.js(303,29): error TS2694: Namespace 'UI.SuggestBox' has no exported member 'Suggestions'. node_modules/chrome-devtools-frontend/front_end/text_editor/TextEditorAutocompleteController.js(329,19): error TS2339: Property 'keyCode' does not exist on type 'Event'. -node_modules/chrome-devtools-frontend/front_end/text_editor/TextEditorAutocompleteController.js(359,35): error TS2339: Property 'getCursor' does not exist on type 'CodeMirror'. -node_modules/chrome-devtools-frontend/front_end/text_editor/TextEditorAutocompleteController.js(360,43): error TS2339: Property 'getLine' does not exist on type 'CodeMirror'. -node_modules/chrome-devtools-frontend/front_end/text_editor/TextEditorAutocompleteController.js(377,39): error TS2339: Property 'listSelections' does not exist on type 'CodeMirror'. -node_modules/chrome-devtools-frontend/front_end/text_editor/TextEditorAutocompleteController.js(382,24): error TS2339: Property 'replaceRange' does not exist on type 'CodeMirror'. -node_modules/chrome-devtools-frontend/front_end/text_editor/TextEditorAutocompleteController.js(389,35): error TS2339: Property 'getCursor' does not exist on type 'CodeMirror'. -node_modules/chrome-devtools-frontend/front_end/text_editor/TextEditorAutocompleteController.js(390,39): error TS2339: Property 'getScrollInfo' does not exist on type 'CodeMirror'. -node_modules/chrome-devtools-frontend/front_end/text_editor/TextEditorAutocompleteController.js(391,46): error TS2339: Property 'lineAtHeight' does not exist on type 'CodeMirror'. -node_modules/chrome-devtools-frontend/front_end/text_editor/TextEditorAutocompleteController.js(392,39): error TS2339: Property 'lineAtHeight' does not exist on type 'CodeMirror'. -node_modules/chrome-devtools-frontend/front_end/text_editor/TextEditorAutocompleteController.js(404,35): error TS2339: Property 'getCursor' does not exist on type 'CodeMirror'. -node_modules/chrome-devtools-frontend/front_end/text_editor/TextEditorAutocompleteController.js(410,35): error TS2339: Property 'getLine' does not exist on type 'CodeMirror'. +node_modules/chrome-devtools-frontend/front_end/text_editor/TextEditorAutocompleteController.js(360,19): error TS2339: Property 'ch' does not exist on type 'void'. +node_modules/chrome-devtools-frontend/front_end/text_editor/TextEditorAutocompleteController.js(360,58): error TS2339: Property 'line' does not exist on type 'void'. +node_modules/chrome-devtools-frontend/front_end/text_editor/TextEditorAutocompleteController.js(360,64): error TS2339: Property 'length' does not exist on type 'void'. +node_modules/chrome-devtools-frontend/front_end/text_editor/TextEditorAutocompleteController.js(377,56): error TS2339: Property 'slice' does not exist on type 'void'. +node_modules/chrome-devtools-frontend/front_end/text_editor/TextEditorAutocompleteController.js(393,16): error TS2339: Property 'line' does not exist on type 'void'. +node_modules/chrome-devtools-frontend/front_end/text_editor/TextEditorAutocompleteController.js(393,51): error TS2339: Property 'line' does not exist on type 'void'. +node_modules/chrome-devtools-frontend/front_end/text_editor/TextEditorAutocompleteController.js(406,18): error TS2339: Property 'line' does not exist on type 'void'. +node_modules/chrome-devtools-frontend/front_end/text_editor/TextEditorAutocompleteController.js(406,96): error TS2339: Property 'ch' does not exist on type 'void'. +node_modules/chrome-devtools-frontend/front_end/text_editor/TextEditorAutocompleteController.js(407,18): error TS2339: Property 'ch' does not exist on type 'void'. +node_modules/chrome-devtools-frontend/front_end/text_editor/TextEditorAutocompleteController.js(409,16): error TS2339: Property 'line' does not exist on type 'void'. +node_modules/chrome-devtools-frontend/front_end/text_editor/TextEditorAutocompleteController.js(409,62): error TS2339: Property 'ch' does not exist on type 'void'. +node_modules/chrome-devtools-frontend/front_end/text_editor/TextEditorAutocompleteController.js(410,50): error TS2339: Property 'line' does not exist on type 'void'. +node_modules/chrome-devtools-frontend/front_end/text_editor/TextEditorAutocompleteController.js(411,89): error TS2339: Property 'charAt' does not exist on type 'void'. +node_modules/chrome-devtools-frontend/front_end/text_editor/TextEditorAutocompleteController.js(411,103): error TS2339: Property 'ch' does not exist on type 'void'. node_modules/chrome-devtools-frontend/front_end/text_utils/Text.js(21,39): error TS2339: Property 'computeLineEndings' does not exist on type 'string'. node_modules/chrome-devtools-frontend/front_end/text_utils/Text.js(51,31): error TS2694: Namespace 'TextUtils.Text' has no exported member 'Position'. node_modules/chrome-devtools-frontend/front_end/text_utils/Text.js(55,34): error TS2339: Property 'lowerBound' does not exist on type 'number[]'. @@ -12671,7 +12592,6 @@ node_modules/chrome-devtools-frontend/front_end/timeline_model/TimelineModel.js( node_modules/chrome-devtools-frontend/front_end/timeline_model/TimelineModel.js(1811,25): error TS2694: Namespace 'Protocol' has no exported member 'Runtime'. node_modules/chrome-devtools-frontend/front_end/timeline_model/TimelineModel.js(1819,32): error TS2694: Namespace 'Protocol' has no exported member 'Runtime'. node_modules/chrome-devtools-frontend/front_end/timeline_model/TimelineModelFilter.js(43,22): error TS1110: Type expected. -node_modules/chrome-devtools-frontend/front_end/timeline_model/TimelineProfileTree.js(72,15): error TS2587: JSDoc type 'TopDownNode' circularly references itself. node_modules/chrome-devtools-frontend/front_end/timeline_model/TimelineProfileTree.js(74,26): error TS2502: 'parent' is referenced directly or indirectly in its own type annotation. node_modules/chrome-devtools-frontend/front_end/timeline_model/TimelineProfileTree.js(168,31): error TS2345: Argument of type 'string | symbol' is not assignable to parameter of type 'string'. Type 'symbol' is not assignable to type 'string'. @@ -12735,7 +12655,6 @@ node_modules/chrome-devtools-frontend/front_end/ui/Context.js(73,30): error TS23 node_modules/chrome-devtools-frontend/front_end/ui/Context.js(77,33): error TS1110: Type expected. node_modules/chrome-devtools-frontend/front_end/ui/Context.js(86,45): error TS1110: Type expected. node_modules/chrome-devtools-frontend/front_end/ui/Context.js(101,16): error TS2339: Property 'runtime' does not exist on type 'Window'. -node_modules/chrome-devtools-frontend/front_end/ui/ContextMenu.js(36,15): error TS2587: JSDoc type 'ContextMenu' circularly references itself. node_modules/chrome-devtools-frontend/front_end/ui/ContextMenu.js(42,15): error TS2502: 'contextMenu' is referenced directly or indirectly in its own type annotation. node_modules/chrome-devtools-frontend/front_end/ui/ContextMenu.js(81,41): error TS2694: Namespace 'InspectorFrontendHostAPI' has no exported member 'ContextMenuDescriptor'. node_modules/chrome-devtools-frontend/front_end/ui/ContextMenu.js(87,18): error TS2339: Property '_customElement' does not exist on type 'ContextMenuItem'. @@ -13047,7 +12966,6 @@ node_modules/chrome-devtools-frontend/front_end/ui/SearchableView.js(367,42): er node_modules/chrome-devtools-frontend/front_end/ui/SearchableView.js(474,9): error TS2352: Conversion of type '{ searchCanceled(): void; performSearch(searchConfig: SearchConfig, shouldJump: boolean, jumpBackwards?: boolean): void; jumpToNextSearchResult(): void; jumpToPreviousSearchResult(): void; supportsCaseSensitiveSearch(): boolean; supportsRegexSearch(): boolean; }' to type '{ replaceSelectionWith(searchConfig: SearchConfig, replacement: string): void; replaceAllWith(searchConfig: SearchConfig, replacement: string): void; }' may be a mistake because neither type sufficiently overlaps with the other. If this was intentional, convert the expression to 'unknown' first. Type '{ searchCanceled(): void; performSearch(searchConfig: SearchConfig, shouldJump: boolean, jumpBackwards?: boolean): void; jumpToNextSearchResult(): void; jumpToPreviousSearchResult(): void; supportsCaseSensitiveSearch(): boolean; supportsRegexSearch(): boolean; }' is missing the following properties from type '{ replaceSelectionWith(searchConfig: SearchConfig, replacement: string): void; replaceAllWith(searchConfig: SearchConfig, replacement: string): void; }': replaceSelectionWith, replaceAllWith node_modules/chrome-devtools-frontend/front_end/ui/SearchableView.js(482,9): error TS2352: Conversion of type '{ searchCanceled(): void; performSearch(searchConfig: SearchConfig, shouldJump: boolean, jumpBackwards?: boolean): void; jumpToNextSearchResult(): void; jumpToPreviousSearchResult(): void; supportsCaseSensitiveSearch(): boolean; supportsRegexSearch(): boolean; }' to type '{ replaceSelectionWith(searchConfig: SearchConfig, replacement: string): void; replaceAllWith(searchConfig: SearchConfig, replacement: string): void; }' may be a mistake because neither type sufficiently overlaps with the other. If this was intentional, convert the expression to 'unknown' first. - Type '{ searchCanceled(): void; performSearch(searchConfig: SearchConfig, shouldJump: boolean, jumpBackwards?: boolean): void; jumpToNextSearchResult(): void; jumpToPreviousSearchResult(): void; supportsCaseSensitiveSearch(): boolean; supportsRegexSearch(): boolean; }' is missing the following properties from type '{ replaceSelectionWith(searchConfig: SearchConfig, replacement: string): void; replaceAllWith(searchConfig: SearchConfig, replacement: string): void; }': replaceSelectionWith, replaceAllWith node_modules/chrome-devtools-frontend/front_end/ui/SearchableView.js(527,15): error TS2355: A function whose declared type is neither 'void' nor 'any' must return a value. node_modules/chrome-devtools-frontend/front_end/ui/SearchableView.js(532,15): error TS2355: A function whose declared type is neither 'void' nor 'any' must return a value. node_modules/chrome-devtools-frontend/front_end/ui/SearchableView.js(587,15): error TS2339: Property '__fromRegExpQuery' does not exist on type 'RegExp'. @@ -13063,13 +12981,13 @@ node_modules/chrome-devtools-frontend/front_end/ui/SettingsUI.js(133,17): error node_modules/chrome-devtools-frontend/front_end/ui/SettingsUI.js(155,15): error TS2355: A function whose declared type is neither 'void' nor 'any' must return a value. node_modules/chrome-devtools-frontend/front_end/ui/ShortcutRegistry.js(16,56): error TS2694: Namespace 'UI.KeyboardShortcut' has no exported member 'Descriptor'. node_modules/chrome-devtools-frontend/front_end/ui/ShortcutRegistry.js(26,83): error TS2339: Property 'valuesArray' does not exist on type 'Set'. -node_modules/chrome-devtools-frontend/front_end/ui/ShortcutRegistry.js(34,38): error TS2339: Property 'get' does not exist on type 'Multimap'. +node_modules/chrome-devtools-frontend/front_end/ui/ShortcutRegistry.js(34,42): error TS2345: Argument of type 'string' is not assignable to parameter of type 'K'. node_modules/chrome-devtools-frontend/front_end/ui/ShortcutRegistry.js(39,44): error TS2694: Namespace 'UI.KeyboardShortcut' has no exported member 'Descriptor'. -node_modules/chrome-devtools-frontend/front_end/ui/ShortcutRegistry.js(42,42): error TS2339: Property 'get' does not exist on type 'Multimap'. +node_modules/chrome-devtools-frontend/front_end/ui/ShortcutRegistry.js(42,46): error TS2345: Argument of type 'string' is not assignable to parameter of type 'K'. node_modules/chrome-devtools-frontend/front_end/ui/ShortcutRegistry.js(88,15): error TS2339: Property 'consume' does not exist on type 'KeyboardEvent'. node_modules/chrome-devtools-frontend/front_end/ui/ShortcutRegistry.js(94,15): error TS2339: Property 'consume' does not exist on type 'KeyboardEvent'. -node_modules/chrome-devtools-frontend/front_end/ui/ShortcutRegistry.js(147,35): error TS2339: Property 'set' does not exist on type 'Multimap'. -node_modules/chrome-devtools-frontend/front_end/ui/ShortcutRegistry.js(148,31): error TS2339: Property 'set' does not exist on type 'Multimap'. +node_modules/chrome-devtools-frontend/front_end/ui/ShortcutRegistry.js(147,39): error TS2345: Argument of type 'string' is not assignable to parameter of type 'K'. +node_modules/chrome-devtools-frontend/front_end/ui/ShortcutRegistry.js(148,35): error TS2345: Argument of type 'string' is not assignable to parameter of type 'K'. node_modules/chrome-devtools-frontend/front_end/ui/ShortcutRegistry.js(163,27): error TS2339: Property 'runtime' does not exist on type 'Window'. node_modules/chrome-devtools-frontend/front_end/ui/ShortcutsScreen.js(42,54): error TS2555: Expected at least 2 arguments, but got 1. node_modules/chrome-devtools-frontend/front_end/ui/ShortcutsScreen.js(46,46): error TS2555: Expected at least 2 arguments, but got 1. @@ -13285,7 +13203,7 @@ node_modules/chrome-devtools-frontend/front_end/ui/TextEditor.js(58,15): error T node_modules/chrome-devtools-frontend/front_end/ui/TextEditor.js(70,18): error TS2694: Namespace 'UI' has no exported member 'AutocompleteConfig'. node_modules/chrome-devtools-frontend/front_end/ui/TextEditor.js(79,15): error TS2355: A function whose declared type is neither 'void' nor 'any' must return a value. node_modules/chrome-devtools-frontend/front_end/ui/TextEditor.js(101,15): error TS2300: Duplicate identifier 'Options'. -node_modules/chrome-devtools-frontend/front_end/ui/TextEditor.js(101,15): error TS2339: Property 'Options' does not exist on type '{ (): void; prototype: { widget(): Widget; fullRange(): TextRange; selection(): TextRange; setSelection(selection: TextRange): void; text(textRange?: TextRange): string; setText(text: string): void; ... 5 more ...; tokenAtTextPosition(lineNumber: number, columnNumber: number): { ...; }; }; Events: { ...; }; }'. +node_modules/chrome-devtools-frontend/front_end/ui/TextEditor.js(101,15): error TS2339: Property 'Options' does not exist on type 'typeof TextEditor'. node_modules/chrome-devtools-frontend/front_end/ui/TextEditor.js(106,119): error TS2694: Namespace 'UI.SuggestBox' has no exported member 'Suggestions'. node_modules/chrome-devtools-frontend/front_end/ui/TextPrompt.js(52,74): error TS2694: Namespace 'UI.SuggestBox' has no exported member 'Suggestions'. node_modules/chrome-devtools-frontend/front_end/ui/TextPrompt.js(89,14): error TS7014: Function type, which lacks return-type annotation, implicitly has an 'any' return type. @@ -13732,13 +13650,12 @@ node_modules/chrome-devtools-frontend/front_end/workspace/SearchConfig.js(177,24 node_modules/chrome-devtools-frontend/front_end/workspace/UISourceCode.js(45,25): error TS2339: Property 'asParsedURL' does not exist on type 'string'. node_modules/chrome-devtools-frontend/front_end/workspace/UISourceCode.js(136,14): error TS2555: Expected at least 2 arguments, but got 1. node_modules/chrome-devtools-frontend/front_end/workspace/UISourceCode.js(298,26): error TS2555: Expected at least 2 arguments, but got 1. -node_modules/chrome-devtools-frontend/front_end/workspace/UISourceCode.js(546,23): error TS2339: Property 'set' does not exist on type 'Multimap'. -node_modules/chrome-devtools-frontend/front_end/workspace/UISourceCode.js(556,37): error TS2339: Property 'get' does not exist on type 'Multimap'. -node_modules/chrome-devtools-frontend/front_end/workspace/UISourceCode.js(557,23): error TS2339: Property 'deleteAll' does not exist on type 'Multimap'. -node_modules/chrome-devtools-frontend/front_end/workspace/UISourceCode.js(567,50): error TS2339: Property 'valuesArray' does not exist on type 'Multimap'. -node_modules/chrome-devtools-frontend/front_end/workspace/UISourceCode.js(573,44): error TS2339: Property 'valuesArray' does not exist on type 'Multimap'. -node_modules/chrome-devtools-frontend/front_end/workspace/UISourceCode.js(574,23): error TS2339: Property 'clear' does not exist on type 'Multimap'. -node_modules/chrome-devtools-frontend/front_end/workspace/UISourceCode.js(584,50): error TS2339: Property 'get' does not exist on type 'Multimap'. +node_modules/chrome-devtools-frontend/front_end/workspace/UISourceCode.js(546,27): error TS2345: Argument of type 'string' is not assignable to parameter of type 'K'. +node_modules/chrome-devtools-frontend/front_end/workspace/UISourceCode.js(556,41): error TS2345: Argument of type 'string' is not assignable to parameter of type 'K'. +node_modules/chrome-devtools-frontend/front_end/workspace/UISourceCode.js(557,33): error TS2345: Argument of type 'string' is not assignable to parameter of type 'K'. +node_modules/chrome-devtools-frontend/front_end/workspace/UISourceCode.js(567,5): error TS2322: Type 'V[]' is not assignable to type 'LineMarker[]'. + Type 'V' is not assignable to type 'LineMarker'. +node_modules/chrome-devtools-frontend/front_end/workspace/UISourceCode.js(584,54): error TS2345: Argument of type 'string' is not assignable to parameter of type 'K'. node_modules/chrome-devtools-frontend/front_end/workspace/Workspace.js(37,15): error TS2355: A function whose declared type is neither 'void' nor 'any' must return a value. node_modules/chrome-devtools-frontend/front_end/workspace/Workspace.js(42,15): error TS2355: A function whose declared type is neither 'void' nor 'any' must return a value. node_modules/chrome-devtools-frontend/front_end/workspace/Workspace.js(47,15): error TS2355: A function whose declared type is neither 'void' nor 'any' must return a value. diff --git a/tests/baselines/reference/user/lodash.log b/tests/baselines/reference/user/lodash.log index f224b826c9c..79200e0d87b 100644 --- a/tests/baselines/reference/user/lodash.log +++ b/tests/baselines/reference/user/lodash.log @@ -79,7 +79,6 @@ node_modules/lodash/_baseWrapperValue.js(18,21): error TS2339: Property 'value' node_modules/lodash/_cloneArrayBuffer.js(11,16): error TS2351: Cannot use 'new' with an expression whose type lacks a call or construct signature. node_modules/lodash/_cloneBuffer.js(4,69): error TS2339: Property 'nodeType' does not exist on type '(buffer: any, isDeep?: boolean | undefined) => any'. node_modules/lodash/_cloneBuffer.js(7,80): error TS2339: Property 'nodeType' does not exist on type '{ "../../../tests/cases/user/lodash/node_modules/lodash/_cloneBuffer": (buffer: any, isDeep?: boolean | undefined) => any; }'. -node_modules/lodash/_cloneBuffer.js(20,12): error TS2587: JSDoc type 'Buffer' circularly references itself. node_modules/lodash/_cloneBuffer.js(22,14): error TS2577: Return type annotation circularly references itself. node_modules/lodash/_cloneBuffer.js(24,22): error TS2502: 'buffer' is referenced directly or indirectly in its own type annotation. node_modules/lodash/_copySymbols.js(13,29): error TS2554: Expected 0 arguments, but got 1. From 984443623194ebbf3d126f7370cd20d6878dbe4c Mon Sep 17 00:00:00 2001 From: Anders Hejlsberg Date: Thu, 24 Jan 2019 09:30:36 -0800 Subject: [PATCH 30/49] Match control flow logic for switch statements to conditional expressions --- src/compiler/checker.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index ac069d95fac..2dec31595ce 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -15780,9 +15780,6 @@ namespace ts { function getTypeAtSwitchClause(flow: FlowSwitchClause): FlowType { const expr = flow.switchStatement.expression; - if (containsMatchingReferenceDiscriminant(reference, expr)) { - return declaredType; - } const flowType = getTypeAtFlowNode(flow.antecedent); let type = getTypeFromFlowType(flowType); if (isMatchingReference(reference, expr)) { @@ -15797,6 +15794,9 @@ namespace ts { else if (expr.kind === SyntaxKind.TypeOfExpression && isMatchingReference(reference, (expr as TypeOfExpression).expression)) { type = narrowBySwitchOnTypeOf(type, flow.switchStatement, flow.clauseStart, flow.clauseEnd); } + else if (containsMatchingReferenceDiscriminant(reference, expr)) { + type = declaredType; + } return createFlowType(type, isIncomplete(flowType)); } From 83f7f4d190b7135fd868a30cae8999a408d94808 Mon Sep 17 00:00:00 2001 From: Anders Hejlsberg Date: Thu, 24 Jan 2019 09:30:46 -0800 Subject: [PATCH 31/49] Add regression test --- .../compiler/discriminantPropertyCheck.ts | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/tests/cases/compiler/discriminantPropertyCheck.ts b/tests/cases/compiler/discriminantPropertyCheck.ts index a24fe07973b..8923e0eb043 100644 --- a/tests/cases/compiler/discriminantPropertyCheck.ts +++ b/tests/cases/compiler/discriminantPropertyCheck.ts @@ -121,3 +121,29 @@ const u: U = {} as any; u.a && u.b && f(u.a, u.b); u.b && u.a && f(u.a, u.b); + +// Repro from #29496 + +declare function never(value: never): never; + +const enum BarEnum { + bar1 = 1, + bar2 = 2, +} + +type UnionOfBar = TypeBar1 | TypeBar2; +type TypeBar1 = { type: BarEnum.bar1 }; +type TypeBar2 = { type: BarEnum.bar2 }; + +function func3(value: Partial) { + if (value.type !== undefined) { + switch (value.type) { + case BarEnum.bar1: + break; + case BarEnum.bar2: + break; + default: + never(value.type); + } + } +} From 48cad7788d1999b9893c62fcebfa5ce42841b0f2 Mon Sep 17 00:00:00 2001 From: Anders Hejlsberg Date: Thu, 24 Jan 2019 09:30:54 -0800 Subject: [PATCH 32/49] Accept new baselines --- .../discriminantPropertyCheck.errors.txt | 26 +++++++ .../reference/discriminantPropertyCheck.js | 38 ++++++++++ .../discriminantPropertyCheck.symbols | 72 +++++++++++++++++++ .../reference/discriminantPropertyCheck.types | 70 ++++++++++++++++++ 4 files changed, 206 insertions(+) diff --git a/tests/baselines/reference/discriminantPropertyCheck.errors.txt b/tests/baselines/reference/discriminantPropertyCheck.errors.txt index 313116edde5..a59b89de9de 100644 --- a/tests/baselines/reference/discriminantPropertyCheck.errors.txt +++ b/tests/baselines/reference/discriminantPropertyCheck.errors.txt @@ -128,4 +128,30 @@ tests/cases/compiler/discriminantPropertyCheck.ts(65,9): error TS2532: Object is u.a && u.b && f(u.a, u.b); u.b && u.a && f(u.a, u.b); + + // Repro from #29496 + + declare function never(value: never): never; + + const enum BarEnum { + bar1 = 1, + bar2 = 2, + } + + type UnionOfBar = TypeBar1 | TypeBar2; + type TypeBar1 = { type: BarEnum.bar1 }; + type TypeBar2 = { type: BarEnum.bar2 }; + + function func3(value: Partial) { + if (value.type !== undefined) { + switch (value.type) { + case BarEnum.bar1: + break; + case BarEnum.bar2: + break; + default: + never(value.type); + } + } + } \ No newline at end of file diff --git a/tests/baselines/reference/discriminantPropertyCheck.js b/tests/baselines/reference/discriminantPropertyCheck.js index 8b2c6f122bc..2b7c842e0b1 100644 --- a/tests/baselines/reference/discriminantPropertyCheck.js +++ b/tests/baselines/reference/discriminantPropertyCheck.js @@ -120,6 +120,32 @@ const u: U = {} as any; u.a && u.b && f(u.a, u.b); u.b && u.a && f(u.a, u.b); + +// Repro from #29496 + +declare function never(value: never): never; + +const enum BarEnum { + bar1 = 1, + bar2 = 2, +} + +type UnionOfBar = TypeBar1 | TypeBar2; +type TypeBar1 = { type: BarEnum.bar1 }; +type TypeBar2 = { type: BarEnum.bar2 }; + +function func3(value: Partial) { + if (value.type !== undefined) { + switch (value.type) { + case BarEnum.bar1: + break; + case BarEnum.bar2: + break; + default: + never(value.type); + } + } +} //// [discriminantPropertyCheck.js] @@ -188,3 +214,15 @@ var f = function (_a, _b) { }; var u = {}; u.a && u.b && f(u.a, u.b); u.b && u.a && f(u.a, u.b); +function func3(value) { + if (value.type !== undefined) { + switch (value.type) { + case 1 /* bar1 */: + break; + case 2 /* bar2 */: + break; + default: + never(value.type); + } + } +} diff --git a/tests/baselines/reference/discriminantPropertyCheck.symbols b/tests/baselines/reference/discriminantPropertyCheck.symbols index 78884eaf69f..8a906adec13 100644 --- a/tests/baselines/reference/discriminantPropertyCheck.symbols +++ b/tests/baselines/reference/discriminantPropertyCheck.symbols @@ -377,3 +377,75 @@ u.b && u.a && f(u.a, u.b); >u : Symbol(u, Decl(discriminantPropertyCheck.ts, 116, 5)) >b : Symbol(b, Decl(discriminantPropertyCheck.ts, 105, 13), Decl(discriminantPropertyCheck.ts, 110, 12)) +// Repro from #29496 + +declare function never(value: never): never; +>never : Symbol(never, Decl(discriminantPropertyCheck.ts, 120, 26)) +>value : Symbol(value, Decl(discriminantPropertyCheck.ts, 124, 23)) + +const enum BarEnum { +>BarEnum : Symbol(BarEnum, Decl(discriminantPropertyCheck.ts, 124, 44)) + + bar1 = 1, +>bar1 : Symbol(BarEnum.bar1, Decl(discriminantPropertyCheck.ts, 126, 20)) + + bar2 = 2, +>bar2 : Symbol(BarEnum.bar2, Decl(discriminantPropertyCheck.ts, 127, 13)) +} + +type UnionOfBar = TypeBar1 | TypeBar2; +>UnionOfBar : Symbol(UnionOfBar, Decl(discriminantPropertyCheck.ts, 129, 1)) +>TypeBar1 : Symbol(TypeBar1, Decl(discriminantPropertyCheck.ts, 131, 38)) +>TypeBar2 : Symbol(TypeBar2, Decl(discriminantPropertyCheck.ts, 132, 39)) + +type TypeBar1 = { type: BarEnum.bar1 }; +>TypeBar1 : Symbol(TypeBar1, Decl(discriminantPropertyCheck.ts, 131, 38)) +>type : Symbol(type, Decl(discriminantPropertyCheck.ts, 132, 17)) +>BarEnum : Symbol(BarEnum, Decl(discriminantPropertyCheck.ts, 124, 44)) +>bar1 : Symbol(BarEnum.bar1, Decl(discriminantPropertyCheck.ts, 126, 20)) + +type TypeBar2 = { type: BarEnum.bar2 }; +>TypeBar2 : Symbol(TypeBar2, Decl(discriminantPropertyCheck.ts, 132, 39)) +>type : Symbol(type, Decl(discriminantPropertyCheck.ts, 133, 17)) +>BarEnum : Symbol(BarEnum, Decl(discriminantPropertyCheck.ts, 124, 44)) +>bar2 : Symbol(BarEnum.bar2, Decl(discriminantPropertyCheck.ts, 127, 13)) + +function func3(value: Partial) { +>func3 : Symbol(func3, Decl(discriminantPropertyCheck.ts, 133, 39)) +>value : Symbol(value, Decl(discriminantPropertyCheck.ts, 135, 15)) +>Partial : Symbol(Partial, Decl(lib.es5.d.ts, --, --)) +>UnionOfBar : Symbol(UnionOfBar, Decl(discriminantPropertyCheck.ts, 129, 1)) + + if (value.type !== undefined) { +>value.type : Symbol(type, Decl(discriminantPropertyCheck.ts, 132, 17), Decl(discriminantPropertyCheck.ts, 133, 17)) +>value : Symbol(value, Decl(discriminantPropertyCheck.ts, 135, 15)) +>type : Symbol(type, Decl(discriminantPropertyCheck.ts, 132, 17), Decl(discriminantPropertyCheck.ts, 133, 17)) +>undefined : Symbol(undefined) + + switch (value.type) { +>value.type : Symbol(type, Decl(discriminantPropertyCheck.ts, 132, 17), Decl(discriminantPropertyCheck.ts, 133, 17)) +>value : Symbol(value, Decl(discriminantPropertyCheck.ts, 135, 15)) +>type : Symbol(type, Decl(discriminantPropertyCheck.ts, 132, 17), Decl(discriminantPropertyCheck.ts, 133, 17)) + + case BarEnum.bar1: +>BarEnum.bar1 : Symbol(BarEnum.bar1, Decl(discriminantPropertyCheck.ts, 126, 20)) +>BarEnum : Symbol(BarEnum, Decl(discriminantPropertyCheck.ts, 124, 44)) +>bar1 : Symbol(BarEnum.bar1, Decl(discriminantPropertyCheck.ts, 126, 20)) + + break; + case BarEnum.bar2: +>BarEnum.bar2 : Symbol(BarEnum.bar2, Decl(discriminantPropertyCheck.ts, 127, 13)) +>BarEnum : Symbol(BarEnum, Decl(discriminantPropertyCheck.ts, 124, 44)) +>bar2 : Symbol(BarEnum.bar2, Decl(discriminantPropertyCheck.ts, 127, 13)) + + break; + default: + never(value.type); +>never : Symbol(never, Decl(discriminantPropertyCheck.ts, 120, 26)) +>value.type : Symbol(type, Decl(discriminantPropertyCheck.ts, 132, 17), Decl(discriminantPropertyCheck.ts, 133, 17)) +>value : Symbol(value, Decl(discriminantPropertyCheck.ts, 135, 15)) +>type : Symbol(type, Decl(discriminantPropertyCheck.ts, 132, 17), Decl(discriminantPropertyCheck.ts, 133, 17)) + } + } +} + diff --git a/tests/baselines/reference/discriminantPropertyCheck.types b/tests/baselines/reference/discriminantPropertyCheck.types index c243ef5e798..5a30f575189 100644 --- a/tests/baselines/reference/discriminantPropertyCheck.types +++ b/tests/baselines/reference/discriminantPropertyCheck.types @@ -378,3 +378,73 @@ u.b && u.a && f(u.a, u.b); >u : U >b : string +// Repro from #29496 + +declare function never(value: never): never; +>never : (value: never) => never +>value : never + +const enum BarEnum { +>BarEnum : BarEnum + + bar1 = 1, +>bar1 : BarEnum.bar1 +>1 : 1 + + bar2 = 2, +>bar2 : BarEnum.bar2 +>2 : 2 +} + +type UnionOfBar = TypeBar1 | TypeBar2; +>UnionOfBar : UnionOfBar + +type TypeBar1 = { type: BarEnum.bar1 }; +>TypeBar1 : TypeBar1 +>type : BarEnum.bar1 +>BarEnum : any + +type TypeBar2 = { type: BarEnum.bar2 }; +>TypeBar2 : TypeBar2 +>type : BarEnum.bar2 +>BarEnum : any + +function func3(value: Partial) { +>func3 : (value: Partial | Partial) => void +>value : Partial | Partial + + if (value.type !== undefined) { +>value.type !== undefined : boolean +>value.type : BarEnum | undefined +>value : Partial | Partial +>type : BarEnum | undefined +>undefined : undefined + + switch (value.type) { +>value.type : BarEnum +>value : Partial | Partial +>type : BarEnum + + case BarEnum.bar1: +>BarEnum.bar1 : BarEnum.bar1 +>BarEnum : typeof BarEnum +>bar1 : BarEnum.bar1 + + break; + case BarEnum.bar2: +>BarEnum.bar2 : BarEnum.bar2 +>BarEnum : typeof BarEnum +>bar2 : BarEnum.bar2 + + break; + default: + never(value.type); +>never(value.type) : never +>never : (value: never) => never +>value.type : never +>value : Partial | Partial +>type : never + } + } +} + From 500c4729e98fe8d77d98ba11d1267bf74c4d5004 Mon Sep 17 00:00:00 2001 From: Anders Hejlsberg Date: Thu, 24 Jan 2019 10:12:35 -0800 Subject: [PATCH 33/49] Add additional repro --- .../compiler/discriminantPropertyCheck.ts | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/tests/cases/compiler/discriminantPropertyCheck.ts b/tests/cases/compiler/discriminantPropertyCheck.ts index 8923e0eb043..6a15af5db65 100644 --- a/tests/cases/compiler/discriminantPropertyCheck.ts +++ b/tests/cases/compiler/discriminantPropertyCheck.ts @@ -122,6 +122,34 @@ u.a && u.b && f(u.a, u.b); u.b && u.a && f(u.a, u.b); +// Repro from #29012 + +type Additive = '+' | '-'; +type Multiplicative = '*' | '/'; + +interface AdditiveObj { + key: Additive +} + +interface MultiplicativeObj { + key: Multiplicative +} + +type Obj = AdditiveObj | MultiplicativeObj + +export function foo(obj: Obj) { + switch (obj.key) { + case '+': { + onlyPlus(obj.key); + return; + } + } +} + +function onlyPlus(arg: '+') { + return arg; +} + // Repro from #29496 declare function never(value: never): never; From 936ee9b92127c31c9f6e2c5eadd2f343ef9e67ea Mon Sep 17 00:00:00 2001 From: Anders Hejlsberg Date: Thu, 24 Jan 2019 10:12:43 -0800 Subject: [PATCH 34/49] Accept new baselines --- .../discriminantPropertyCheck.errors.txt | 28 ++++ .../reference/discriminantPropertyCheck.js | 42 +++++ .../discriminantPropertyCheck.symbols | 155 ++++++++++++------ .../reference/discriminantPropertyCheck.types | 53 ++++++ 4 files changed, 230 insertions(+), 48 deletions(-) diff --git a/tests/baselines/reference/discriminantPropertyCheck.errors.txt b/tests/baselines/reference/discriminantPropertyCheck.errors.txt index a59b89de9de..962faaa740e 100644 --- a/tests/baselines/reference/discriminantPropertyCheck.errors.txt +++ b/tests/baselines/reference/discriminantPropertyCheck.errors.txt @@ -129,6 +129,34 @@ tests/cases/compiler/discriminantPropertyCheck.ts(65,9): error TS2532: Object is u.b && u.a && f(u.a, u.b); + // Repro from #29012 + + type Additive = '+' | '-'; + type Multiplicative = '*' | '/'; + + interface AdditiveObj { + key: Additive + } + + interface MultiplicativeObj { + key: Multiplicative + } + + type Obj = AdditiveObj | MultiplicativeObj + + export function foo(obj: Obj) { + switch (obj.key) { + case '+': { + onlyPlus(obj.key); + return; + } + } + } + + function onlyPlus(arg: '+') { + return arg; + } + // Repro from #29496 declare function never(value: never): never; diff --git a/tests/baselines/reference/discriminantPropertyCheck.js b/tests/baselines/reference/discriminantPropertyCheck.js index 2b7c842e0b1..25e66e044cd 100644 --- a/tests/baselines/reference/discriminantPropertyCheck.js +++ b/tests/baselines/reference/discriminantPropertyCheck.js @@ -121,6 +121,34 @@ u.a && u.b && f(u.a, u.b); u.b && u.a && f(u.a, u.b); +// Repro from #29012 + +type Additive = '+' | '-'; +type Multiplicative = '*' | '/'; + +interface AdditiveObj { + key: Additive +} + +interface MultiplicativeObj { + key: Multiplicative +} + +type Obj = AdditiveObj | MultiplicativeObj + +export function foo(obj: Obj) { + switch (obj.key) { + case '+': { + onlyPlus(obj.key); + return; + } + } +} + +function onlyPlus(arg: '+') { + return arg; +} + // Repro from #29496 declare function never(value: never): never; @@ -149,6 +177,8 @@ function func3(value: Partial) { //// [discriminantPropertyCheck.js] +"use strict"; +exports.__esModule = true; function goo1(x) { if (x.kind === "A" && x.foo !== undefined) { x.foo.length; @@ -214,6 +244,18 @@ var f = function (_a, _b) { }; var u = {}; u.a && u.b && f(u.a, u.b); u.b && u.a && f(u.a, u.b); +function foo(obj) { + switch (obj.key) { + case '+': { + onlyPlus(obj.key); + return; + } + } +} +exports.foo = foo; +function onlyPlus(arg) { + return arg; +} function func3(value) { if (value.type !== undefined) { switch (value.type) { diff --git a/tests/baselines/reference/discriminantPropertyCheck.symbols b/tests/baselines/reference/discriminantPropertyCheck.symbols index 8a906adec13..b02a8113d46 100644 --- a/tests/baselines/reference/discriminantPropertyCheck.symbols +++ b/tests/baselines/reference/discriminantPropertyCheck.symbols @@ -377,74 +377,133 @@ u.b && u.a && f(u.a, u.b); >u : Symbol(u, Decl(discriminantPropertyCheck.ts, 116, 5)) >b : Symbol(b, Decl(discriminantPropertyCheck.ts, 105, 13), Decl(discriminantPropertyCheck.ts, 110, 12)) -// Repro from #29496 +// Repro from #29012 -declare function never(value: never): never; ->never : Symbol(never, Decl(discriminantPropertyCheck.ts, 120, 26)) ->value : Symbol(value, Decl(discriminantPropertyCheck.ts, 124, 23)) +type Additive = '+' | '-'; +>Additive : Symbol(Additive, Decl(discriminantPropertyCheck.ts, 120, 26)) -const enum BarEnum { ->BarEnum : Symbol(BarEnum, Decl(discriminantPropertyCheck.ts, 124, 44)) +type Multiplicative = '*' | '/'; +>Multiplicative : Symbol(Multiplicative, Decl(discriminantPropertyCheck.ts, 124, 26)) - bar1 = 1, ->bar1 : Symbol(BarEnum.bar1, Decl(discriminantPropertyCheck.ts, 126, 20)) +interface AdditiveObj { +>AdditiveObj : Symbol(AdditiveObj, Decl(discriminantPropertyCheck.ts, 125, 32)) - bar2 = 2, ->bar2 : Symbol(BarEnum.bar2, Decl(discriminantPropertyCheck.ts, 127, 13)) + key: Additive +>key : Symbol(AdditiveObj.key, Decl(discriminantPropertyCheck.ts, 127, 23)) +>Additive : Symbol(Additive, Decl(discriminantPropertyCheck.ts, 120, 26)) } -type UnionOfBar = TypeBar1 | TypeBar2; ->UnionOfBar : Symbol(UnionOfBar, Decl(discriminantPropertyCheck.ts, 129, 1)) ->TypeBar1 : Symbol(TypeBar1, Decl(discriminantPropertyCheck.ts, 131, 38)) ->TypeBar2 : Symbol(TypeBar2, Decl(discriminantPropertyCheck.ts, 132, 39)) +interface MultiplicativeObj { +>MultiplicativeObj : Symbol(MultiplicativeObj, Decl(discriminantPropertyCheck.ts, 129, 1)) -type TypeBar1 = { type: BarEnum.bar1 }; ->TypeBar1 : Symbol(TypeBar1, Decl(discriminantPropertyCheck.ts, 131, 38)) ->type : Symbol(type, Decl(discriminantPropertyCheck.ts, 132, 17)) ->BarEnum : Symbol(BarEnum, Decl(discriminantPropertyCheck.ts, 124, 44)) ->bar1 : Symbol(BarEnum.bar1, Decl(discriminantPropertyCheck.ts, 126, 20)) + key: Multiplicative +>key : Symbol(MultiplicativeObj.key, Decl(discriminantPropertyCheck.ts, 131, 29)) +>Multiplicative : Symbol(Multiplicative, Decl(discriminantPropertyCheck.ts, 124, 26)) +} -type TypeBar2 = { type: BarEnum.bar2 }; ->TypeBar2 : Symbol(TypeBar2, Decl(discriminantPropertyCheck.ts, 132, 39)) ->type : Symbol(type, Decl(discriminantPropertyCheck.ts, 133, 17)) ->BarEnum : Symbol(BarEnum, Decl(discriminantPropertyCheck.ts, 124, 44)) ->bar2 : Symbol(BarEnum.bar2, Decl(discriminantPropertyCheck.ts, 127, 13)) +type Obj = AdditiveObj | MultiplicativeObj +>Obj : Symbol(Obj, Decl(discriminantPropertyCheck.ts, 133, 1)) +>AdditiveObj : Symbol(AdditiveObj, Decl(discriminantPropertyCheck.ts, 125, 32)) +>MultiplicativeObj : Symbol(MultiplicativeObj, Decl(discriminantPropertyCheck.ts, 129, 1)) -function func3(value: Partial) { ->func3 : Symbol(func3, Decl(discriminantPropertyCheck.ts, 133, 39)) ->value : Symbol(value, Decl(discriminantPropertyCheck.ts, 135, 15)) ->Partial : Symbol(Partial, Decl(lib.es5.d.ts, --, --)) ->UnionOfBar : Symbol(UnionOfBar, Decl(discriminantPropertyCheck.ts, 129, 1)) +export function foo(obj: Obj) { +>foo : Symbol(foo, Decl(discriminantPropertyCheck.ts, 135, 42)) +>obj : Symbol(obj, Decl(discriminantPropertyCheck.ts, 137, 20)) +>Obj : Symbol(Obj, Decl(discriminantPropertyCheck.ts, 133, 1)) - if (value.type !== undefined) { ->value.type : Symbol(type, Decl(discriminantPropertyCheck.ts, 132, 17), Decl(discriminantPropertyCheck.ts, 133, 17)) ->value : Symbol(value, Decl(discriminantPropertyCheck.ts, 135, 15)) ->type : Symbol(type, Decl(discriminantPropertyCheck.ts, 132, 17), Decl(discriminantPropertyCheck.ts, 133, 17)) ->undefined : Symbol(undefined) + switch (obj.key) { +>obj.key : Symbol(key, Decl(discriminantPropertyCheck.ts, 127, 23), Decl(discriminantPropertyCheck.ts, 131, 29)) +>obj : Symbol(obj, Decl(discriminantPropertyCheck.ts, 137, 20)) +>key : Symbol(key, Decl(discriminantPropertyCheck.ts, 127, 23), Decl(discriminantPropertyCheck.ts, 131, 29)) - switch (value.type) { ->value.type : Symbol(type, Decl(discriminantPropertyCheck.ts, 132, 17), Decl(discriminantPropertyCheck.ts, 133, 17)) ->value : Symbol(value, Decl(discriminantPropertyCheck.ts, 135, 15)) ->type : Symbol(type, Decl(discriminantPropertyCheck.ts, 132, 17), Decl(discriminantPropertyCheck.ts, 133, 17)) + case '+': { + onlyPlus(obj.key); +>onlyPlus : Symbol(onlyPlus, Decl(discriminantPropertyCheck.ts, 144, 1)) +>obj.key : Symbol(AdditiveObj.key, Decl(discriminantPropertyCheck.ts, 127, 23)) +>obj : Symbol(obj, Decl(discriminantPropertyCheck.ts, 137, 20)) +>key : Symbol(AdditiveObj.key, Decl(discriminantPropertyCheck.ts, 127, 23)) + return; + } + } +} + +function onlyPlus(arg: '+') { +>onlyPlus : Symbol(onlyPlus, Decl(discriminantPropertyCheck.ts, 144, 1)) +>arg : Symbol(arg, Decl(discriminantPropertyCheck.ts, 146, 18)) + + return arg; +>arg : Symbol(arg, Decl(discriminantPropertyCheck.ts, 146, 18)) +} + +// Repro from #29496 + +declare function never(value: never): never; +>never : Symbol(never, Decl(discriminantPropertyCheck.ts, 148, 1)) +>value : Symbol(value, Decl(discriminantPropertyCheck.ts, 152, 23)) + +const enum BarEnum { +>BarEnum : Symbol(BarEnum, Decl(discriminantPropertyCheck.ts, 152, 44)) + + bar1 = 1, +>bar1 : Symbol(BarEnum.bar1, Decl(discriminantPropertyCheck.ts, 154, 20)) + + bar2 = 2, +>bar2 : Symbol(BarEnum.bar2, Decl(discriminantPropertyCheck.ts, 155, 13)) +} + +type UnionOfBar = TypeBar1 | TypeBar2; +>UnionOfBar : Symbol(UnionOfBar, Decl(discriminantPropertyCheck.ts, 157, 1)) +>TypeBar1 : Symbol(TypeBar1, Decl(discriminantPropertyCheck.ts, 159, 38)) +>TypeBar2 : Symbol(TypeBar2, Decl(discriminantPropertyCheck.ts, 160, 39)) + +type TypeBar1 = { type: BarEnum.bar1 }; +>TypeBar1 : Symbol(TypeBar1, Decl(discriminantPropertyCheck.ts, 159, 38)) +>type : Symbol(type, Decl(discriminantPropertyCheck.ts, 160, 17)) +>BarEnum : Symbol(BarEnum, Decl(discriminantPropertyCheck.ts, 152, 44)) +>bar1 : Symbol(BarEnum.bar1, Decl(discriminantPropertyCheck.ts, 154, 20)) + +type TypeBar2 = { type: BarEnum.bar2 }; +>TypeBar2 : Symbol(TypeBar2, Decl(discriminantPropertyCheck.ts, 160, 39)) +>type : Symbol(type, Decl(discriminantPropertyCheck.ts, 161, 17)) +>BarEnum : Symbol(BarEnum, Decl(discriminantPropertyCheck.ts, 152, 44)) +>bar2 : Symbol(BarEnum.bar2, Decl(discriminantPropertyCheck.ts, 155, 13)) + +function func3(value: Partial) { +>func3 : Symbol(func3, Decl(discriminantPropertyCheck.ts, 161, 39)) +>value : Symbol(value, Decl(discriminantPropertyCheck.ts, 163, 15)) +>Partial : Symbol(Partial, Decl(lib.es5.d.ts, --, --)) +>UnionOfBar : Symbol(UnionOfBar, Decl(discriminantPropertyCheck.ts, 157, 1)) + + if (value.type !== undefined) { +>value.type : Symbol(type, Decl(discriminantPropertyCheck.ts, 160, 17), Decl(discriminantPropertyCheck.ts, 161, 17)) +>value : Symbol(value, Decl(discriminantPropertyCheck.ts, 163, 15)) +>type : Symbol(type, Decl(discriminantPropertyCheck.ts, 160, 17), Decl(discriminantPropertyCheck.ts, 161, 17)) +>undefined : Symbol(undefined) + + switch (value.type) { +>value.type : Symbol(type, Decl(discriminantPropertyCheck.ts, 160, 17), Decl(discriminantPropertyCheck.ts, 161, 17)) +>value : Symbol(value, Decl(discriminantPropertyCheck.ts, 163, 15)) +>type : Symbol(type, Decl(discriminantPropertyCheck.ts, 160, 17), Decl(discriminantPropertyCheck.ts, 161, 17)) + case BarEnum.bar1: ->BarEnum.bar1 : Symbol(BarEnum.bar1, Decl(discriminantPropertyCheck.ts, 126, 20)) ->BarEnum : Symbol(BarEnum, Decl(discriminantPropertyCheck.ts, 124, 44)) ->bar1 : Symbol(BarEnum.bar1, Decl(discriminantPropertyCheck.ts, 126, 20)) +>BarEnum.bar1 : Symbol(BarEnum.bar1, Decl(discriminantPropertyCheck.ts, 154, 20)) +>BarEnum : Symbol(BarEnum, Decl(discriminantPropertyCheck.ts, 152, 44)) +>bar1 : Symbol(BarEnum.bar1, Decl(discriminantPropertyCheck.ts, 154, 20)) break; case BarEnum.bar2: ->BarEnum.bar2 : Symbol(BarEnum.bar2, Decl(discriminantPropertyCheck.ts, 127, 13)) ->BarEnum : Symbol(BarEnum, Decl(discriminantPropertyCheck.ts, 124, 44)) ->bar2 : Symbol(BarEnum.bar2, Decl(discriminantPropertyCheck.ts, 127, 13)) +>BarEnum.bar2 : Symbol(BarEnum.bar2, Decl(discriminantPropertyCheck.ts, 155, 13)) +>BarEnum : Symbol(BarEnum, Decl(discriminantPropertyCheck.ts, 152, 44)) +>bar2 : Symbol(BarEnum.bar2, Decl(discriminantPropertyCheck.ts, 155, 13)) break; default: never(value.type); ->never : Symbol(never, Decl(discriminantPropertyCheck.ts, 120, 26)) ->value.type : Symbol(type, Decl(discriminantPropertyCheck.ts, 132, 17), Decl(discriminantPropertyCheck.ts, 133, 17)) ->value : Symbol(value, Decl(discriminantPropertyCheck.ts, 135, 15)) ->type : Symbol(type, Decl(discriminantPropertyCheck.ts, 132, 17), Decl(discriminantPropertyCheck.ts, 133, 17)) +>never : Symbol(never, Decl(discriminantPropertyCheck.ts, 148, 1)) +>value.type : Symbol(type, Decl(discriminantPropertyCheck.ts, 160, 17), Decl(discriminantPropertyCheck.ts, 161, 17)) +>value : Symbol(value, Decl(discriminantPropertyCheck.ts, 163, 15)) +>type : Symbol(type, Decl(discriminantPropertyCheck.ts, 160, 17), Decl(discriminantPropertyCheck.ts, 161, 17)) } } } diff --git a/tests/baselines/reference/discriminantPropertyCheck.types b/tests/baselines/reference/discriminantPropertyCheck.types index 5a30f575189..def89e7be1f 100644 --- a/tests/baselines/reference/discriminantPropertyCheck.types +++ b/tests/baselines/reference/discriminantPropertyCheck.types @@ -378,6 +378,59 @@ u.b && u.a && f(u.a, u.b); >u : U >b : string +// Repro from #29012 + +type Additive = '+' | '-'; +>Additive : Additive + +type Multiplicative = '*' | '/'; +>Multiplicative : Multiplicative + +interface AdditiveObj { + key: Additive +>key : Additive +} + +interface MultiplicativeObj { + key: Multiplicative +>key : Multiplicative +} + +type Obj = AdditiveObj | MultiplicativeObj +>Obj : Obj + +export function foo(obj: Obj) { +>foo : (obj: Obj) => void +>obj : Obj + + switch (obj.key) { +>obj.key : "+" | "-" | "*" | "/" +>obj : Obj +>key : "+" | "-" | "*" | "/" + + case '+': { +>'+' : "+" + + onlyPlus(obj.key); +>onlyPlus(obj.key) : "+" +>onlyPlus : (arg: "+") => "+" +>obj.key : "+" +>obj : AdditiveObj +>key : "+" + + return; + } + } +} + +function onlyPlus(arg: '+') { +>onlyPlus : (arg: "+") => "+" +>arg : "+" + + return arg; +>arg : "+" +} + // Repro from #29496 declare function never(value: never): never; From 9acff37947392bb3c3c53d16c9fb25039cbc0f4b Mon Sep 17 00:00:00 2001 From: Sheetal Nandi Date: Thu, 24 Jan 2019 11:45:22 -0800 Subject: [PATCH 35/49] Add test to test the readFile called on prepend input file for emitting and verifying emit --- src/testRunner/unittests/tsbuild.ts | 42 +++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/src/testRunner/unittests/tsbuild.ts b/src/testRunner/unittests/tsbuild.ts index ba94072b230..b8a58eb1bc0 100644 --- a/src/testRunner/unittests/tsbuild.ts +++ b/src/testRunner/unittests/tsbuild.ts @@ -469,11 +469,20 @@ export const b = new A();`); describe("unittests:: tsbuild - baseline sectioned sourcemaps", () => { let fs: vfs.FileSystem | undefined; + const actualReadFileMap = createMap(); before(() => { fs = outFileFs.shadow(); const host = new fakes.SolutionBuilderHost(fs); const builder = createSolutionBuilder(host, ["/src/third"], { dry: false, force: false, verbose: false }); host.clearDiagnostics(); + const originalReadFile = host.readFile; + host.readFile = path => { + // Dont record libs + if (path.startsWith("/src/")) { + actualReadFileMap.set(path, (actualReadFileMap.get(path) || 0) + 1); + } + return originalReadFile.call(host, path); + }; builder.buildAllProjects(); host.assertDiagnosticMessages(/*none*/); }); @@ -485,6 +494,39 @@ export const b = new A();`); // tslint:disable-next-line:no-null-keyword Harness.Baseline.runBaseline("outfile-concat.js", patch ? vfs.formatPatch(patch) : null); }); + it("verify readFile calls", () => { + const expectedMap = createMap(); + // Configs + expectedMap.set("/src/third/tsconfig.json", 1); + expectedMap.set("/src/second/tsconfig.json", 1); + expectedMap.set("/src/first/tsconfig.json", 1); + + // Source files + expectedMap.set("/src/third/third_part1.ts", 1); + expectedMap.set("/src/second/second_part1.ts", 1); + expectedMap.set("/src/second/second_part2.ts", 1); + expectedMap.set("/src/first/first_PART1.ts", 1); + expectedMap.set("/src/first/first_part2.ts", 1); + expectedMap.set("/src/first/first_part3.ts", 1); + + // outputs + expectedMap.set("/src/first/bin/first-output.js", 2); + expectedMap.set("/src/first/bin/first-output.js.map", 2); + // 1 for reading source File, 2 for forEachEmittedFiles (verifying compiler Options and actual emit)when prepend array is created + expectedMap.set("/src/first/bin/first-output.d.ts", 3); + expectedMap.set("/src/first/bin/first-output.d.ts.map", 2); + expectedMap.set("/src/2/second-output.js", 2); + expectedMap.set("/src/2/second-output.js.map", 2); + // 1 for reading source File, 2 for forEachEmittedFiles (verifying compiler Options and actual emit)when prepend array is created + expectedMap.set("/src/2/second-output.d.ts", 3); + expectedMap.set("/src/2/second-output.d.ts.map", 2); + + assert.equal(actualReadFileMap.size, expectedMap.size, `Expected: ${JSON.stringify(arrayFrom(expectedMap.entries()))} \nActual: ${JSON.stringify(arrayFrom(actualReadFileMap.entries()))}`); + actualReadFileMap.forEach((value, key) => { + const expected = expectedMap.get(key); + assert.equal(value, expected, `Expected: ${JSON.stringify(arrayFrom(expectedMap.entries()))} \nActual: ${JSON.stringify(arrayFrom(actualReadFileMap.entries()))}`); + }); + }); }); describe("unittests:: tsbuild - downstream prepend projects always get rebuilt", () => { From fdeb8f01df33eaedfb2cb76d003a6be08bd3ff14 Mon Sep 17 00:00:00 2001 From: Wesley Wigham Date: Thu, 24 Jan 2019 12:58:46 -0800 Subject: [PATCH 36/49] Fix typo in runner selection in gulp --- scripts/build/tests.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/build/tests.js b/scripts/build/tests.js index 5bc619e3823..46c31ed8913 100644 --- a/scripts/build/tests.js +++ b/scripts/build/tests.js @@ -165,7 +165,7 @@ exports.cleanTestDirs = cleanTestDirs; function writeTestConfigFile(tests, runners, light, taskConfigsFolder, workerCount, stackTraceLimit, timeout, keepFailed) { const testConfigContents = JSON.stringify({ test: tests ? [tests] : undefined, - runner: runners ? runners.split(",") : undefined, + runners: runners ? runners.split(",") : undefined, light, workerCount, stackTraceLimit, @@ -192,4 +192,4 @@ function restoreSavedNodeEnv() { function deleteTemporaryProjectOutput() { return del(path.join(exports.localBaseline, "projectOutput/")); -} \ No newline at end of file +} From 95eec999e8ed4c91bad1f9c72181667df7bb3b40 Mon Sep 17 00:00:00 2001 From: Ryan Cavanaugh Date: Thu, 24 Jan 2019 13:31:44 -0800 Subject: [PATCH 37/49] Tweaks --- CONTRIBUTING.md | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index a25ed0ad4cd..c707e3c034c 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -51,12 +51,11 @@ In general, things we find useful when reviewing suggestions are: ### Faster clones -The TypeScript repository is relatively large. To save some time, you might want to clone it without the repo's full history using -`git clone --depth=1` to save time. +The TypeScript repository is relatively large. To save some time, you might want to clone it without the repo's full history using `git clone --depth=1`. ### Using local builds -Run `jake build` to build a version of the compiler/language service that reflects changes you've made. You can then run `node /built/local/tsc.js` in place of `tsc` in your project. For example, to run `tsc --watch` from within the root of the repository on a file called `test.ts`, you can run `node ./built/local/tsc.js --watch test.ts`. +Run `gulp build` to build a version of the compiler/language service that reflects changes you've made. You can then run `node /built/local/tsc.js` in place of `tsc` in your project. For example, to run `tsc --watch` from within the root of the repository on a file called `test.ts`, you can run `node ./built/local/tsc.js --watch test.ts`. ## Contributing bug fixes From 50d98aee0e83bbf806d1f08c0b3eae785690da69 Mon Sep 17 00:00:00 2001 From: Sheetal Nandi Date: Thu, 24 Jan 2019 12:40:52 -0800 Subject: [PATCH 38/49] Create getters for js sourcemap, dts and dts map text getters in prepend nodes --- src/compiler/emitter.ts | 19 +++-- src/compiler/factory.ts | 81 +++++++++++++++---- src/compiler/program.ts | 10 +-- src/compiler/transformers/declarations.ts | 2 +- src/compiler/transformers/ts.ts | 2 +- src/compiler/types.ts | 3 + src/testRunner/unittests/tsbuild.ts | 20 ++--- .../reference/api/tsserverlibrary.d.ts | 9 ++- tests/baselines/reference/api/typescript.d.ts | 9 ++- 9 files changed, 107 insertions(+), 48 deletions(-) diff --git a/src/compiler/emitter.ts b/src/compiler/emitter.ts index 395f6448890..8daedabf29a 100644 --- a/src/compiler/emitter.ts +++ b/src/compiler/emitter.ts @@ -38,17 +38,22 @@ namespace ts { } } + /*@internal*/ + export function getOutputPathsForBundle(options: CompilerOptions, forceDtsPaths: boolean): EmitFileNames { + const outPath = options.outFile || options.out!; + const jsFilePath = options.emitDeclarationOnly ? undefined : outPath; + const sourceMapFilePath = jsFilePath && getSourceMapFilePath(jsFilePath, options); + const declarationFilePath = (forceDtsPaths || getEmitDeclarations(options)) ? removeFileExtension(outPath) + Extension.Dts : undefined; + const declarationMapPath = declarationFilePath && getAreDeclarationMapsEnabled(options) ? declarationFilePath + ".map" : undefined; + const bundleInfoPath = options.references && jsFilePath ? (removeFileExtension(jsFilePath) + infoExtension) : undefined; + return { jsFilePath, sourceMapFilePath, declarationFilePath, declarationMapPath, bundleInfoPath }; + } + /*@internal*/ export function getOutputPathsFor(sourceFile: SourceFile | Bundle, host: EmitHost, forceDtsPaths: boolean): EmitFileNames { const options = host.getCompilerOptions(); if (sourceFile.kind === SyntaxKind.Bundle) { - const outPath = options.outFile || options.out!; - const jsFilePath = options.emitDeclarationOnly ? undefined : outPath; - const sourceMapFilePath = jsFilePath && getSourceMapFilePath(jsFilePath, options); - const declarationFilePath = (forceDtsPaths || getEmitDeclarations(options)) ? removeFileExtension(outPath) + Extension.Dts : undefined; - const declarationMapPath = declarationFilePath && getAreDeclarationMapsEnabled(options) ? declarationFilePath + ".map" : undefined; - const bundleInfoPath = options.references && jsFilePath ? (removeFileExtension(jsFilePath) + infoExtension) : undefined; - return { jsFilePath, sourceMapFilePath, declarationFilePath, declarationMapPath, bundleInfoPath }; + return getOutputPathsForBundle(options, forceDtsPaths); } else { const ownOutputFilePath = getOwnEmitOutputFilePath(sourceFile.fileName, host, getOutputExtension(sourceFile, options)); diff --git a/src/compiler/factory.ts b/src/compiler/factory.ts index ec19d2c906c..3707b725ed3 100644 --- a/src/compiler/factory.ts +++ b/src/compiler/factory.ts @@ -2630,41 +2630,88 @@ namespace ts { } export function createUnparsedSourceFile(text: string): UnparsedSource; + export function createUnparsedSourceFile(inputFile: InputFiles, type: "js" | "dts"): UnparsedSource; export function createUnparsedSourceFile(text: string, mapPath: string | undefined, map: string | undefined): UnparsedSource; - export function createUnparsedSourceFile(text: string, mapPath?: string, map?: string): UnparsedSource { + export function createUnparsedSourceFile(textOrInputFiles: string | InputFiles, mapPathOrType?: string | "js" | "dts", map?: string): UnparsedSource { const node = createNode(SyntaxKind.UnparsedSource); - node.text = text; - node.sourceMapPath = mapPath; - node.sourceMapText = map; + if (!isString(textOrInputFiles)) { + Debug.assert(mapPathOrType === "js" || mapPathOrType === "dts"); + node.fileName = mapPathOrType === "js" ? textOrInputFiles.javascriptPath : textOrInputFiles.declarationPath; + node.sourceMapPath = mapPathOrType === "js" ? textOrInputFiles.javascriptMapPath : textOrInputFiles.declarationMapPath; + Object.defineProperties(node, { + text: { get() { return mapPathOrType === "js" ? textOrInputFiles.javascriptText : textOrInputFiles.declarationText; } }, + sourceMapText: { get() { return mapPathOrType === "js" ? textOrInputFiles.javascriptMapText : textOrInputFiles.declarationMapText; } }, + }); + } + else { + node.text = textOrInputFiles; + node.sourceMapPath = mapPathOrType; + node.sourceMapText = map; + } return node; } export function createInputFiles( - javascript: string, - declaration: string + javascriptText: string, + declarationText: string ): InputFiles; export function createInputFiles( - javascript: string, - declaration: string, + readFileText: (path: string) => string | undefined, + javascriptPath: string, + javascriptMapPath: string | undefined, + declarationPath: string, + declarationMapPath: string | undefined, + ): InputFiles; + export function createInputFiles( + javascriptText: string, + declarationText: string, javascriptMapPath: string | undefined, javascriptMapText: string | undefined, declarationMapPath: string | undefined, declarationMapText: string | undefined ): InputFiles; export function createInputFiles( - javascript: string, - declaration: string, + javascriptTextOrReadFileText: string | ((path: string) => string | undefined), + declarationTextOrJavascriptPath: string, javascriptMapPath?: string, - javascriptMapText?: string, + javascriptMapTextOrDeclarationPath?: string, declarationMapPath?: string, declarationMapText?: string ): InputFiles { const node = createNode(SyntaxKind.InputFiles); - node.javascriptText = javascript; - node.javascriptMapPath = javascriptMapPath; - node.javascriptMapText = javascriptMapText; - node.declarationText = declaration; - node.declarationMapPath = declarationMapPath; - node.declarationMapText = declarationMapText; + if (!isString(javascriptTextOrReadFileText)) { + const cache = createMap(); + const textGetter = (path: string | undefined) => { + if (path === undefined) return undefined; + let value = cache.get(path); + if (value === undefined) { + value = javascriptTextOrReadFileText(path); + cache.set(path, value !== undefined ? value : false); + } + return value !== false ? value as string : undefined; + }; + const definedTextGetter = (path: string) => { + const result = textGetter(path); + return result !== undefined ? result : `/* Input file ${path} was missing */\r\n`; + }; + node.javascriptPath = declarationTextOrJavascriptPath; + node.javascriptMapPath = javascriptMapPath; + node.declarationPath = Debug.assertDefined(javascriptMapTextOrDeclarationPath); + node.declarationMapPath = declarationMapPath; + Object.defineProperties(node, { + javascriptText: { get() { return definedTextGetter(declarationTextOrJavascriptPath); } }, + javascriptMapText: { get() { return textGetter(javascriptMapPath); } }, + declarationText: { get() { return definedTextGetter(Debug.assertDefined(javascriptMapTextOrDeclarationPath)); } }, + declarationMapText: { get() { return textGetter(declarationMapPath); } } + }); + } + else { + node.javascriptText = javascriptTextOrReadFileText; + node.javascriptMapPath = javascriptMapPath; + node.javascriptMapText = javascriptMapTextOrDeclarationPath; + node.declarationText = declarationTextOrJavascriptPath; + node.declarationMapPath = declarationMapPath; + node.declarationMapText = declarationMapText; + } return node; } diff --git a/src/compiler/program.ts b/src/compiler/program.ts index 14042a89e94..dbc2e61fa42 100644 --- a/src/compiler/program.ts +++ b/src/compiler/program.ts @@ -1456,14 +1456,8 @@ namespace ts { // Upstream project didn't have outFile set -- skip (error will have been issued earlier) if (!out) continue; - const dtsFilename = changeExtension(out, ".d.ts"); - const js = host.readFile(out) || `/* Input file ${out} was missing */\r\n`; - const jsMapPath = out + ".map"; // TODO: try to read sourceMappingUrl comment from the file - const jsMap = host.readFile(jsMapPath); - const dts = host.readFile(dtsFilename) || `/* Input file ${dtsFilename} was missing */\r\n`; - const dtsMapPath = dtsFilename + ".map"; - const dtsMap = host.readFile(dtsMapPath); - const node = createInputFiles(js, dts, jsMap && jsMapPath, jsMap, dtsMap && dtsMapPath, dtsMap); + const { jsFilePath, sourceMapFilePath, declarationFilePath, declarationMapPath } = getOutputPathsForBundle(resolvedRefOpts.options, /*forceDtsPaths*/ true); + const node = createInputFiles(path => host.readFile(path), jsFilePath!, sourceMapFilePath, declarationFilePath!, declarationMapPath); nodes.push(node); } } diff --git a/src/compiler/transformers/declarations.ts b/src/compiler/transformers/declarations.ts index d03c3b8d30b..42bb5d77931 100644 --- a/src/compiler/transformers/declarations.ts +++ b/src/compiler/transformers/declarations.ts @@ -207,7 +207,7 @@ namespace ts { } ), mapDefined(node.prepends, prepend => { if (prepend.kind === SyntaxKind.InputFiles) { - return createUnparsedSourceFile(prepend.declarationText, prepend.declarationMapPath, prepend.declarationMapText); + return createUnparsedSourceFile(prepend, "dts"); } })); bundle.syntheticFileReferences = []; diff --git a/src/compiler/transformers/ts.ts b/src/compiler/transformers/ts.ts index a22c6df8d06..7aebed59588 100644 --- a/src/compiler/transformers/ts.ts +++ b/src/compiler/transformers/ts.ts @@ -101,7 +101,7 @@ namespace ts { function transformBundle(node: Bundle) { return createBundle(node.sourceFiles.map(transformSourceFile), mapDefined(node.prepends, prepend => { if (prepend.kind === SyntaxKind.InputFiles) { - return createUnparsedSourceFile(prepend.javascriptText, prepend.javascriptMapPath, prepend.javascriptMapText); + return createUnparsedSourceFile(prepend, "js"); } return prepend; })); diff --git a/src/compiler/types.ts b/src/compiler/types.ts index d213e862299..c460b948347 100644 --- a/src/compiler/types.ts +++ b/src/compiler/types.ts @@ -2761,9 +2761,11 @@ namespace ts { export interface InputFiles extends Node { kind: SyntaxKind.InputFiles; + javascriptPath?: string; javascriptText: string; javascriptMapPath?: string; javascriptMapText?: string; + declarationPath?: string; declarationText: string; declarationMapPath?: string; declarationMapText?: string; @@ -2771,6 +2773,7 @@ namespace ts { export interface UnparsedSource extends Node { kind: SyntaxKind.UnparsedSource; + fileName?: string; text: string; sourceMapPath?: string; sourceMapText?: string; diff --git a/src/testRunner/unittests/tsbuild.ts b/src/testRunner/unittests/tsbuild.ts index b8a58eb1bc0..be544f4eb1d 100644 --- a/src/testRunner/unittests/tsbuild.ts +++ b/src/testRunner/unittests/tsbuild.ts @@ -510,16 +510,16 @@ export const b = new A();`); expectedMap.set("/src/first/first_part3.ts", 1); // outputs - expectedMap.set("/src/first/bin/first-output.js", 2); - expectedMap.set("/src/first/bin/first-output.js.map", 2); - // 1 for reading source File, 2 for forEachEmittedFiles (verifying compiler Options and actual emit)when prepend array is created - expectedMap.set("/src/first/bin/first-output.d.ts", 3); - expectedMap.set("/src/first/bin/first-output.d.ts.map", 2); - expectedMap.set("/src/2/second-output.js", 2); - expectedMap.set("/src/2/second-output.js.map", 2); - // 1 for reading source File, 2 for forEachEmittedFiles (verifying compiler Options and actual emit)when prepend array is created - expectedMap.set("/src/2/second-output.d.ts", 3); - expectedMap.set("/src/2/second-output.d.ts.map", 2); + expectedMap.set("/src/first/bin/first-output.js", 1); + expectedMap.set("/src/first/bin/first-output.js.map", 1); + // 1 for reading source File, 1 for emit + expectedMap.set("/src/first/bin/first-output.d.ts", 2); + expectedMap.set("/src/first/bin/first-output.d.ts.map", 1); + expectedMap.set("/src/2/second-output.js", 1); + expectedMap.set("/src/2/second-output.js.map", 1); + // 1 for reading source File, 1 for emit + expectedMap.set("/src/2/second-output.d.ts", 2); + expectedMap.set("/src/2/second-output.d.ts.map", 1); assert.equal(actualReadFileMap.size, expectedMap.size, `Expected: ${JSON.stringify(arrayFrom(expectedMap.entries()))} \nActual: ${JSON.stringify(arrayFrom(actualReadFileMap.entries()))}`); actualReadFileMap.forEach((value, key) => { diff --git a/tests/baselines/reference/api/tsserverlibrary.d.ts b/tests/baselines/reference/api/tsserverlibrary.d.ts index 4353bbcd8fa..a384375b248 100644 --- a/tests/baselines/reference/api/tsserverlibrary.d.ts +++ b/tests/baselines/reference/api/tsserverlibrary.d.ts @@ -1726,15 +1726,18 @@ declare namespace ts { } interface InputFiles extends Node { kind: SyntaxKind.InputFiles; + javascriptPath?: string; javascriptText: string; javascriptMapPath?: string; javascriptMapText?: string; + declarationPath?: string; declarationText: string; declarationMapPath?: string; declarationMapText?: string; } interface UnparsedSource extends Node { kind: SyntaxKind.UnparsedSource; + fileName?: string; text: string; sourceMapPath?: string; sourceMapText?: string; @@ -3979,9 +3982,11 @@ declare namespace ts { function updateCommaList(node: CommaListExpression, elements: ReadonlyArray): CommaListExpression; function createBundle(sourceFiles: ReadonlyArray, prepends?: ReadonlyArray): Bundle; function createUnparsedSourceFile(text: string): UnparsedSource; + function createUnparsedSourceFile(inputFile: InputFiles, type: "js" | "dts"): UnparsedSource; function createUnparsedSourceFile(text: string, mapPath: string | undefined, map: string | undefined): UnparsedSource; - function createInputFiles(javascript: string, declaration: string): InputFiles; - function createInputFiles(javascript: string, declaration: string, javascriptMapPath: string | undefined, javascriptMapText: string | undefined, declarationMapPath: string | undefined, declarationMapText: string | undefined): InputFiles; + function createInputFiles(javascriptText: string, declarationText: string): InputFiles; + function createInputFiles(readFileText: (path: string) => string | undefined, javascriptPath: string, javascriptMapPath: string | undefined, declarationPath: string, declarationMapPath: string | undefined): InputFiles; + function createInputFiles(javascriptText: string, declarationText: string, javascriptMapPath: string | undefined, javascriptMapText: string | undefined, declarationMapPath: string | undefined, declarationMapText: string | undefined): InputFiles; function updateBundle(node: Bundle, sourceFiles: ReadonlyArray, prepends?: ReadonlyArray): Bundle; function createImmediatelyInvokedFunctionExpression(statements: ReadonlyArray): CallExpression; function createImmediatelyInvokedFunctionExpression(statements: ReadonlyArray, param: ParameterDeclaration, paramValue: Expression): CallExpression; diff --git a/tests/baselines/reference/api/typescript.d.ts b/tests/baselines/reference/api/typescript.d.ts index d8deb32c0ef..5ae49608353 100644 --- a/tests/baselines/reference/api/typescript.d.ts +++ b/tests/baselines/reference/api/typescript.d.ts @@ -1726,15 +1726,18 @@ declare namespace ts { } interface InputFiles extends Node { kind: SyntaxKind.InputFiles; + javascriptPath?: string; javascriptText: string; javascriptMapPath?: string; javascriptMapText?: string; + declarationPath?: string; declarationText: string; declarationMapPath?: string; declarationMapText?: string; } interface UnparsedSource extends Node { kind: SyntaxKind.UnparsedSource; + fileName?: string; text: string; sourceMapPath?: string; sourceMapText?: string; @@ -3979,9 +3982,11 @@ declare namespace ts { function updateCommaList(node: CommaListExpression, elements: ReadonlyArray): CommaListExpression; function createBundle(sourceFiles: ReadonlyArray, prepends?: ReadonlyArray): Bundle; function createUnparsedSourceFile(text: string): UnparsedSource; + function createUnparsedSourceFile(inputFile: InputFiles, type: "js" | "dts"): UnparsedSource; function createUnparsedSourceFile(text: string, mapPath: string | undefined, map: string | undefined): UnparsedSource; - function createInputFiles(javascript: string, declaration: string): InputFiles; - function createInputFiles(javascript: string, declaration: string, javascriptMapPath: string | undefined, javascriptMapText: string | undefined, declarationMapPath: string | undefined, declarationMapText: string | undefined): InputFiles; + function createInputFiles(javascriptText: string, declarationText: string): InputFiles; + function createInputFiles(readFileText: (path: string) => string | undefined, javascriptPath: string, javascriptMapPath: string | undefined, declarationPath: string, declarationMapPath: string | undefined): InputFiles; + function createInputFiles(javascriptText: string, declarationText: string, javascriptMapPath: string | undefined, javascriptMapText: string | undefined, declarationMapPath: string | undefined, declarationMapText: string | undefined): InputFiles; function updateBundle(node: Bundle, sourceFiles: ReadonlyArray, prepends?: ReadonlyArray): Bundle; function createImmediatelyInvokedFunctionExpression(statements: ReadonlyArray): CallExpression; function createImmediatelyInvokedFunctionExpression(statements: ReadonlyArray, param: ParameterDeclaration, paramValue: Expression): CallExpression; From 216ed1b3859489a36a0ae0c315ec6209d64ec022 Mon Sep 17 00:00:00 2001 From: Sheetal Nandi Date: Thu, 24 Jan 2019 13:47:27 -0800 Subject: [PATCH 39/49] Get dts content from sourceFile if present --- src/compiler/program.ts | 6 +++- src/testRunner/unittests/tsbuild.ts | 53 ++++++++++++++--------------- 2 files changed, 31 insertions(+), 28 deletions(-) diff --git a/src/compiler/program.ts b/src/compiler/program.ts index dbc2e61fa42..e7c2295a0ca 100644 --- a/src/compiler/program.ts +++ b/src/compiler/program.ts @@ -1457,7 +1457,11 @@ namespace ts { if (!out) continue; const { jsFilePath, sourceMapFilePath, declarationFilePath, declarationMapPath } = getOutputPathsForBundle(resolvedRefOpts.options, /*forceDtsPaths*/ true); - const node = createInputFiles(path => host.readFile(path), jsFilePath!, sourceMapFilePath, declarationFilePath!, declarationMapPath); + const node = createInputFiles(fileName => { + const path = toPath(fileName); + const sourceFile = getSourceFileByPath(path); + return sourceFile ? sourceFile.text : filesByName.has(path) ? undefined : host.readFile(path); + }, jsFilePath! , sourceMapFilePath, declarationFilePath! , declarationMapPath); nodes.push(node); } } diff --git a/src/testRunner/unittests/tsbuild.ts b/src/testRunner/unittests/tsbuild.ts index be544f4eb1d..e1bc78c712b 100644 --- a/src/testRunner/unittests/tsbuild.ts +++ b/src/testRunner/unittests/tsbuild.ts @@ -495,36 +495,35 @@ export const b = new A();`); Harness.Baseline.runBaseline("outfile-concat.js", patch ? vfs.formatPatch(patch) : null); }); it("verify readFile calls", () => { - const expectedMap = createMap(); - // Configs - expectedMap.set("/src/third/tsconfig.json", 1); - expectedMap.set("/src/second/tsconfig.json", 1); - expectedMap.set("/src/first/tsconfig.json", 1); + const expected = [ + // Configs + "/src/third/tsconfig.json", + "/src/second/tsconfig.json", + "/src/first/tsconfig.json", - // Source files - expectedMap.set("/src/third/third_part1.ts", 1); - expectedMap.set("/src/second/second_part1.ts", 1); - expectedMap.set("/src/second/second_part2.ts", 1); - expectedMap.set("/src/first/first_PART1.ts", 1); - expectedMap.set("/src/first/first_part2.ts", 1); - expectedMap.set("/src/first/first_part3.ts", 1); + // Source files + "/src/third/third_part1.ts", + "/src/second/second_part1.ts", + "/src/second/second_part2.ts", + "/src/first/first_PART1.ts", + "/src/first/first_part2.ts", + "/src/first/first_part3.ts", - // outputs - expectedMap.set("/src/first/bin/first-output.js", 1); - expectedMap.set("/src/first/bin/first-output.js.map", 1); - // 1 for reading source File, 1 for emit - expectedMap.set("/src/first/bin/first-output.d.ts", 2); - expectedMap.set("/src/first/bin/first-output.d.ts.map", 1); - expectedMap.set("/src/2/second-output.js", 1); - expectedMap.set("/src/2/second-output.js.map", 1); - // 1 for reading source File, 1 for emit - expectedMap.set("/src/2/second-output.d.ts", 2); - expectedMap.set("/src/2/second-output.d.ts.map", 1); + // outputs + "/src/first/bin/first-output.js", + "/src/first/bin/first-output.js.map", + "/src/first/bin/first-output.d.ts", + "/src/first/bin/first-output.d.ts.map", + "/src/2/second-output.js", + "/src/2/second-output.js.map", + "/src/2/second-output.d.ts", + "/src/2/second-output.d.ts.map" + ]; - assert.equal(actualReadFileMap.size, expectedMap.size, `Expected: ${JSON.stringify(arrayFrom(expectedMap.entries()))} \nActual: ${JSON.stringify(arrayFrom(actualReadFileMap.entries()))}`); - actualReadFileMap.forEach((value, key) => { - const expected = expectedMap.get(key); - assert.equal(value, expected, `Expected: ${JSON.stringify(arrayFrom(expectedMap.entries()))} \nActual: ${JSON.stringify(arrayFrom(actualReadFileMap.entries()))}`); + assert.equal(actualReadFileMap.size, expected.length, `Expected: ${JSON.stringify(expected)} \nActual: ${JSON.stringify(arrayFrom(actualReadFileMap.entries()))}`); + expected.forEach(expectedValue => { + const actual = actualReadFileMap.get(expectedValue); + assert.equal(actual, 1, `Mismatch in read file call number for: ${expectedValue}\nExpected: ${JSON.stringify(expected)} \nActual: ${JSON.stringify(arrayFrom(actualReadFileMap.entries()))}`); }); }); }); From 399f98791808e3ace7731aa89a26a3e246d02a30 Mon Sep 17 00:00:00 2001 From: Sheetal Nandi Date: Thu, 24 Jan 2019 13:54:45 -0800 Subject: [PATCH 40/49] Add todos for sourcemap that accidently got reverted. --- src/compiler/factory.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/compiler/factory.ts b/src/compiler/factory.ts index 3707b725ed3..c59b2f67e98 100644 --- a/src/compiler/factory.ts +++ b/src/compiler/factory.ts @@ -2699,9 +2699,9 @@ namespace ts { node.declarationMapPath = declarationMapPath; Object.defineProperties(node, { javascriptText: { get() { return definedTextGetter(declarationTextOrJavascriptPath); } }, - javascriptMapText: { get() { return textGetter(javascriptMapPath); } }, + javascriptMapText: { get() { return textGetter(javascriptMapPath); } }, // TODO:: if there is inline sourceMap in jsFile, use that declarationText: { get() { return definedTextGetter(Debug.assertDefined(javascriptMapTextOrDeclarationPath)); } }, - declarationMapText: { get() { return textGetter(declarationMapPath); } } + declarationMapText: { get() { return textGetter(declarationMapPath); } } // TODO:: if there is inline sourceMap in dtsFile, use that }); } else { From ec817f55f3a143ca7b035c11cf88a621e4a6f0f1 Mon Sep 17 00:00:00 2001 From: Sheetal Nandi Date: Thu, 24 Jan 2019 15:27:39 -0800 Subject: [PATCH 41/49] Fix unnecessary union --- src/compiler/factory.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/compiler/factory.ts b/src/compiler/factory.ts index c59b2f67e98..ab15bccafb0 100644 --- a/src/compiler/factory.ts +++ b/src/compiler/factory.ts @@ -2632,7 +2632,7 @@ namespace ts { export function createUnparsedSourceFile(text: string): UnparsedSource; export function createUnparsedSourceFile(inputFile: InputFiles, type: "js" | "dts"): UnparsedSource; export function createUnparsedSourceFile(text: string, mapPath: string | undefined, map: string | undefined): UnparsedSource; - export function createUnparsedSourceFile(textOrInputFiles: string | InputFiles, mapPathOrType?: string | "js" | "dts", map?: string): UnparsedSource { + export function createUnparsedSourceFile(textOrInputFiles: string | InputFiles, mapPathOrType?: string, map?: string): UnparsedSource { const node = createNode(SyntaxKind.UnparsedSource); if (!isString(textOrInputFiles)) { Debug.assert(mapPathOrType === "js" || mapPathOrType === "dts"); From 0ddcab34690683feb577af8bdab876d74132008d Mon Sep 17 00:00:00 2001 From: Wesley Wigham Date: Thu, 24 Jan 2019 15:37:13 -0800 Subject: [PATCH 42/49] Fix master: handle generating type name for late bound dupe message more nicely (#29572) * Fix master: handle generating type name for late bound dupe message more nicely * Make literal type casts more specific in many places to better reflect the checks performed --- src/compiler/checker.ts | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index f7e66b89a7b..8947f98f864 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -4855,7 +4855,7 @@ namespace ts { function getLiteralPropertyNameText(name: PropertyName) { const type = getLiteralTypeFromPropertyName(name); - return type.flags & (TypeFlags.StringLiteral | TypeFlags.NumberLiteral) ? "" + (type).value : undefined; + return type.flags & (TypeFlags.StringLiteral | TypeFlags.NumberLiteral) ? "" + (type).value : undefined; } /** Return the inferred type for a binding element */ @@ -6450,12 +6450,12 @@ namespace ts { /** * Gets the symbolic name for a late-bound member from its type. */ - function getLateBoundNameFromType(type: LiteralType | UniqueESSymbolType): __String { + function getLateBoundNameFromType(type: StringLiteralType | NumberLiteralType | UniqueESSymbolType): __String { if (type.flags & TypeFlags.UniqueESSymbol) { return `__@${type.symbol.escapedName}@${getSymbolId(type.symbol)}` as __String; } if (type.flags & (TypeFlags.StringLiteral | TypeFlags.NumberLiteral)) { - return escapeLeadingUnderscores("" + (type).value); + return escapeLeadingUnderscores("" + (type).value); } return Debug.fail(); } @@ -6534,7 +6534,7 @@ namespace ts { // If we have an existing early-bound member, combine its declarations so that we can // report an error at each declaration. const declarations = earlySymbol ? concatenate(earlySymbol.declarations, lateSymbol.declarations) : lateSymbol.declarations; - const name = (type).value || declarationNameToString(decl.name); + const name = !(type.flags & TypeFlags.UniqueESSymbol) && unescapeLeadingUnderscores(memberName) || declarationNameToString(decl.name); forEach(declarations, declaration => error(getNameOfDeclaration(declaration) || declaration, Diagnostics.Property_0_was_also_declared_here, name)); error(decl.name || decl, Diagnostics.Duplicate_property_0, name); lateSymbol = createSymbol(SymbolFlags.None, memberName, CheckFlags.Late); @@ -9814,7 +9814,7 @@ namespace ts { if (accessNode) { const indexNode = getIndexNodeForAccessExpression(accessNode); if (indexType.flags & (TypeFlags.StringLiteral | TypeFlags.NumberLiteral)) { - error(indexNode, Diagnostics.Property_0_does_not_exist_on_type_1, "" + (indexType).value, typeToString(objectType)); + error(indexNode, Diagnostics.Property_0_does_not_exist_on_type_1, "" + (indexType).value, typeToString(objectType)); } else if (indexType.flags & (TypeFlags.String | TypeFlags.Number)) { error(indexNode, Diagnostics.Type_0_has_no_matching_index_signature_for_type_1, typeToString(objectType), typeToString(indexType)); @@ -11759,11 +11759,11 @@ namespace ts { if (s & TypeFlags.StringLike && t & TypeFlags.String) return true; if (s & TypeFlags.StringLiteral && s & TypeFlags.EnumLiteral && t & TypeFlags.StringLiteral && !(t & TypeFlags.EnumLiteral) && - (source).value === (target).value) return true; + (source).value === (target).value) return true; if (s & TypeFlags.NumberLike && t & TypeFlags.Number) return true; if (s & TypeFlags.NumberLiteral && s & TypeFlags.EnumLiteral && t & TypeFlags.NumberLiteral && !(t & TypeFlags.EnumLiteral) && - (source).value === (target).value) return true; + (source).value === (target).value) return true; if (s & TypeFlags.BigIntLike && t & TypeFlags.BigInt) return true; if (s & TypeFlags.BooleanLike && t & TypeFlags.Boolean) return true; if (s & TypeFlags.ESSymbolLike && t & TypeFlags.ESSymbol) return true; @@ -13687,8 +13687,8 @@ namespace ts { // no flags for all other types (including non-falsy literal types). function getFalsyFlags(type: Type): TypeFlags { return type.flags & TypeFlags.Union ? getFalsyFlagsOfTypes((type).types) : - type.flags & TypeFlags.StringLiteral ? (type).value === "" ? TypeFlags.StringLiteral : 0 : - type.flags & TypeFlags.NumberLiteral ? (type).value === 0 ? TypeFlags.NumberLiteral : 0 : + type.flags & TypeFlags.StringLiteral ? (type).value === "" ? TypeFlags.StringLiteral : 0 : + type.flags & TypeFlags.NumberLiteral ? (type).value === 0 ? TypeFlags.NumberLiteral : 0 : type.flags & TypeFlags.BigIntLiteral ? isZeroBigInt(type) ? TypeFlags.BigIntLiteral : 0 : type.flags & TypeFlags.BooleanLiteral ? (type === falseType || type === regularFalseType) ? TypeFlags.BooleanLiteral : 0 : type.flags & TypeFlags.PossiblyFalsy; @@ -13711,8 +13711,8 @@ namespace ts { type === regularFalseType || type === falseType || type.flags & (TypeFlags.Void | TypeFlags.Undefined | TypeFlags.Null) || - type.flags & TypeFlags.StringLiteral && (type).value === "" || - type.flags & TypeFlags.NumberLiteral && (type).value === 0 || + type.flags & TypeFlags.StringLiteral && (type).value === "" || + type.flags & TypeFlags.NumberLiteral && (type).value === 0 || type.flags & TypeFlags.BigIntLiteral && isZeroBigInt(type) ? type : neverType; } @@ -15100,7 +15100,7 @@ namespace ts { return strictNullChecks ? TypeFacts.StringStrictFacts : TypeFacts.StringFacts; } if (flags & TypeFlags.StringLiteral) { - const isEmpty = (type).value === ""; + const isEmpty = (type).value === ""; return strictNullChecks ? isEmpty ? TypeFacts.EmptyStringStrictFacts : TypeFacts.NonEmptyStringStrictFacts : isEmpty ? TypeFacts.EmptyStringFacts : TypeFacts.NonEmptyStringFacts; @@ -15109,7 +15109,7 @@ namespace ts { return strictNullChecks ? TypeFacts.NumberStrictFacts : TypeFacts.NumberFacts; } if (flags & TypeFlags.NumberLiteral) { - const isZero = (type).value === 0; + const isZero = (type).value === 0; return strictNullChecks ? isZero ? TypeFacts.ZeroNumberStrictFacts : TypeFacts.NonZeroNumberStrictFacts : isZero ? TypeFacts.ZeroNumberFacts : TypeFacts.NonZeroNumberFacts; From d16cf761ba49d9e0579a0fe3f90fd5a7f52d0c44 Mon Sep 17 00:00:00 2001 From: Wesley Wigham Date: Thu, 24 Jan 2019 17:33:12 -0800 Subject: [PATCH 43/49] Move random file in root into test folder (#29575) --- .../cases/fourslash/completionAtDottedNamespace.ts | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename completionAtDottedNamespace.ts => tests/cases/fourslash/completionAtDottedNamespace.ts (100%) diff --git a/completionAtDottedNamespace.ts b/tests/cases/fourslash/completionAtDottedNamespace.ts similarity index 100% rename from completionAtDottedNamespace.ts rename to tests/cases/fourslash/completionAtDottedNamespace.ts From b3f873631635810fdae9a0dd4771565bf326f2e5 Mon Sep 17 00:00:00 2001 From: Yang Cao Date: Fri, 25 Jan 2019 13:48:32 -0500 Subject: [PATCH 44/49] Remove extra http str in badge url --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 57c2a54385d..2826db8aec6 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ [![Build Status](https://travis-ci.org/Microsoft/TypeScript.svg?branch=master)](https://travis-ci.org/Microsoft/TypeScript) -[![VSTS Build Status](https://dev.azure.com/typescript/TypeScript/_apis/build/status/Typescript/node10)](https://https://dev.azure.com/typescript/TypeScript/_build/latest?definitionId=4&view=logs) +[![VSTS Build Status](https://dev.azure.com/typescript/TypeScript/_apis/build/status/Typescript/node10)](https://dev.azure.com/typescript/TypeScript/_build/latest?definitionId=4&view=logs) [![npm version](https://badge.fury.io/js/typescript.svg)](https://www.npmjs.com/package/typescript) [![Downloads](https://img.shields.io/npm/dm/typescript.svg)](https://www.npmjs.com/package/typescript) From f51939326a7cc1392765b86bd9768ba071ffa479 Mon Sep 17 00:00:00 2001 From: Ron Buckton Date: Fri, 25 Jan 2019 10:52:00 -0800 Subject: [PATCH 45/49] Add tsserver task to gulp --- Gulpfile.js | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/Gulpfile.js b/Gulpfile.js index c272caf2b6e..7a577ebafe1 100644 --- a/Gulpfile.js +++ b/Gulpfile.js @@ -215,6 +215,11 @@ const tsserverProject = "src/tsserver/tsconfig.json"; const tsserverJs = "built/local/tsserver.js"; gulp.task(tsserverJs, /*help*/ false, useCompilerDeps, () => project.compile(tsserverProject, { typescript: useCompiler })); +gulp.task( + "tsserver", + "Builds the language server", + [tsserverJs]); + const watchGuardProject = "src/watchGuard/tsconfig.json"; const watchGuardJs = "built/local/watchGuard.js"; gulp.task(watchGuardJs, /*help*/ false, useCompilerDeps, () => project.compile(watchGuardProject, { typescript: useCompiler })); From 74d41b926a04a354e0fe01236085f02ba25e44bb Mon Sep 17 00:00:00 2001 From: Wesley Wigham Date: Fri, 25 Jan 2019 10:55:24 -0800 Subject: [PATCH 46/49] Fix crash in watch-local --- Gulpfile.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Gulpfile.js b/Gulpfile.js index c272caf2b6e..cacaf4c3d00 100644 --- a/Gulpfile.js +++ b/Gulpfile.js @@ -542,7 +542,7 @@ const watchLocalPatterns = [ gulp.task( "watch-local", "Watches for changes to projects in src/ (but does not execute tests).", - () => gulp.watch(watchLocalPatterns, "local")); + () => gulp.watch(watchLocalPatterns, ["local"])); const watchPatterns = [ "src/tsconfig-base.json", @@ -632,4 +632,4 @@ gulp.task( "clean:scripts", "clean-rules", "clean-built" - ]); \ No newline at end of file + ]); From e51a2fe80d0b4f47dc4348ebcdf308e39895b846 Mon Sep 17 00:00:00 2001 From: Sheetal Nandi Date: Fri, 25 Jan 2019 14:02:15 -0800 Subject: [PATCH 47/49] Skip declaration emit for files that are just executables --- Gulpfile.js | 2 +- Jakefile.js | 2 +- src/cancellationToken/tsconfig.json | 2 +- src/testRunner/tsconfig.json | 2 +- src/tsc/tsconfig.json | 2 +- src/tsconfig-noncomposite-base.json | 8 ++++++++ src/tsserver/tsconfig.json | 2 +- src/typingsInstaller/tsconfig.json | 2 +- src/watchGuard/tsconfig.json | 4 ++-- 9 files changed, 17 insertions(+), 9 deletions(-) create mode 100644 src/tsconfig-noncomposite-base.json diff --git a/Gulpfile.js b/Gulpfile.js index cf80668cbd0..3aed88d3a70 100644 --- a/Gulpfile.js +++ b/Gulpfile.js @@ -138,7 +138,7 @@ gulp.task(typescriptServicesProject, /*help*/ false, () => { compilerOptions: { "removeComments": false, "stripInternal": true, - "declarationMap": false, + "declaration": true, "outFile": "typescriptServices.out.js" // must align with same task in jakefile. We fix this name below. } }); diff --git a/Jakefile.js b/Jakefile.js index 1413230c079..1a38e4d09e2 100644 --- a/Jakefile.js +++ b/Jakefile.js @@ -361,7 +361,7 @@ file(ConfigFileFor.tsserverLibrary, [], function () { compilerOptions: { "removeComments": false, "stripInternal": true, - "declarationMap": false, + "declaration": true, "outFile": "tsserverlibrary.out.js" } }) diff --git a/src/cancellationToken/tsconfig.json b/src/cancellationToken/tsconfig.json index e16ce22120e..6d9e0af7724 100644 --- a/src/cancellationToken/tsconfig.json +++ b/src/cancellationToken/tsconfig.json @@ -1,5 +1,5 @@ { - "extends": "../tsconfig-base", + "extends": "../tsconfig-noncomposite-base", "compilerOptions": { "outDir": "../../built/local/", "rootDir": ".", diff --git a/src/testRunner/tsconfig.json b/src/testRunner/tsconfig.json index 2e5341732b5..3b3a477511e 100644 --- a/src/testRunner/tsconfig.json +++ b/src/testRunner/tsconfig.json @@ -1,5 +1,5 @@ { - "extends": "../tsconfig-base", + "extends": "../tsconfig-noncomposite-base", "compilerOptions": { "outFile": "../../built/local/run.js", "composite": false, diff --git a/src/tsc/tsconfig.json b/src/tsc/tsconfig.json index 8bc02279930..e97cedc5de2 100644 --- a/src/tsc/tsconfig.json +++ b/src/tsc/tsconfig.json @@ -1,5 +1,5 @@ { - "extends": "../tsconfig-base", + "extends": "../tsconfig-noncomposite-base", "compilerOptions": { "outFile": "../../built/local/tsc.js" }, diff --git a/src/tsconfig-noncomposite-base.json b/src/tsconfig-noncomposite-base.json new file mode 100644 index 00000000000..569269f7562 --- /dev/null +++ b/src/tsconfig-noncomposite-base.json @@ -0,0 +1,8 @@ +{ + "extends": "./tsconfig-base", + "compilerOptions": { + "declaration": false, + "declarationMap": false, + "composite": false + } +} diff --git a/src/tsserver/tsconfig.json b/src/tsserver/tsconfig.json index 8f14785cd47..16ffd722f2d 100644 --- a/src/tsserver/tsconfig.json +++ b/src/tsserver/tsconfig.json @@ -1,5 +1,5 @@ { - "extends": "../tsconfig-base", + "extends": "../tsconfig-noncomposite-base", "compilerOptions": { "outFile": "../../built/local/tsserver.js", diff --git a/src/typingsInstaller/tsconfig.json b/src/typingsInstaller/tsconfig.json index 675c045ba00..143409e9e9a 100644 --- a/src/typingsInstaller/tsconfig.json +++ b/src/typingsInstaller/tsconfig.json @@ -1,5 +1,5 @@ { - "extends": "../tsconfig-base", + "extends": "../tsconfig-noncomposite-base", "compilerOptions": { "removeComments": true, "outFile": "../../built/local/typingsInstaller.js", diff --git a/src/watchGuard/tsconfig.json b/src/watchGuard/tsconfig.json index 7262a5db58e..aafa2270297 100644 --- a/src/watchGuard/tsconfig.json +++ b/src/watchGuard/tsconfig.json @@ -1,5 +1,5 @@ { - "extends": "../tsconfig-base", + "extends": "../tsconfig-noncomposite-base", "compilerOptions": { "removeComments": true, "outFile": "../../built/local/watchGuard.js", @@ -13,4 +13,4 @@ "files": [ "watchGuard.ts" ] -} \ No newline at end of file +} From 5f782bf58a5931f299a42d863aa7fac244d1e7a2 Mon Sep 17 00:00:00 2001 From: Wesley Wigham Date: Fri, 25 Jan 2019 15:18:07 -0800 Subject: [PATCH 48/49] Fixup restrictive instantiations to actually erase type parameter constraints (#29592) --- src/compiler/checker.ts | 6 +++++- .../typeParameterIndirectlyConstrainedToItself.errors.txt | 5 +---- .../typeParameterIndirectlyConstrainedToItself.types | 2 +- 3 files changed, 7 insertions(+), 6 deletions(-) diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index c96f93e1136..4c74b60766b 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -10636,7 +10636,11 @@ namespace ts { } function getRestrictiveTypeParameter(tp: TypeParameter) { - return !tp.constraint ? tp : tp.restrictiveInstantiation || (tp.restrictiveInstantiation = createTypeParameter(tp.symbol)); + return tp.constraint === unknownType ? tp : tp.restrictiveInstantiation || ( + tp.restrictiveInstantiation = createTypeParameter(tp.symbol), + (tp.restrictiveInstantiation as TypeParameter).constraint = unknownType, + tp.restrictiveInstantiation + ); } function restrictiveMapper(type: Type) { diff --git a/tests/baselines/reference/typeParameterIndirectlyConstrainedToItself.errors.txt b/tests/baselines/reference/typeParameterIndirectlyConstrainedToItself.errors.txt index 8ca5c51ea2d..4dcf8530b01 100644 --- a/tests/baselines/reference/typeParameterIndirectlyConstrainedToItself.errors.txt +++ b/tests/baselines/reference/typeParameterIndirectlyConstrainedToItself.errors.txt @@ -25,10 +25,9 @@ tests/cases/conformance/types/typeParameters/typeParameterLists/typeParameterInd tests/cases/conformance/types/typeParameters/typeParameterLists/typeParameterIndirectlyConstrainedToItself.ts(16,47): error TS2313: Type parameter 'V' has a circular constraint. tests/cases/conformance/types/typeParameters/typeParameterLists/typeParameterIndirectlyConstrainedToItself.ts(18,32): error TS2313: Type parameter 'T' has a circular constraint. tests/cases/conformance/types/typeParameters/typeParameterLists/typeParameterIndirectlyConstrainedToItself.ts(18,45): error TS2313: Type parameter 'V' has a circular constraint. -tests/cases/conformance/types/typeParameters/typeParameterLists/typeParameterIndirectlyConstrainedToItself.ts(23,24): error TS2313: Type parameter 'S' has a circular constraint. -==== tests/cases/conformance/types/typeParameters/typeParameterLists/typeParameterIndirectlyConstrainedToItself.ts (28 errors) ==== +==== tests/cases/conformance/types/typeParameters/typeParameterLists/typeParameterIndirectlyConstrainedToItself.ts (27 errors) ==== class C { } ~ !!! error TS2313: Type parameter 'U' has a circular constraint. @@ -106,6 +105,4 @@ tests/cases/conformance/types/typeParameters/typeParameterLists/typeParameterInd type Foo = [T] extends [number] ? {} : {}; function foo>() {} - ~~~~~~ -!!! error TS2313: Type parameter 'S' has a circular constraint. \ No newline at end of file diff --git a/tests/baselines/reference/typeParameterIndirectlyConstrainedToItself.types b/tests/baselines/reference/typeParameterIndirectlyConstrainedToItself.types index c2b20688fb5..637cb583d2e 100644 --- a/tests/baselines/reference/typeParameterIndirectlyConstrainedToItself.types +++ b/tests/baselines/reference/typeParameterIndirectlyConstrainedToItself.types @@ -38,5 +38,5 @@ type Foo = [T] extends [number] ? {} : {}; >Foo : Foo function foo>() {} ->foo : () => void +>foo : >() => void From 4da9d8bc87f356950496bde3d4a82d06bc5ce264 Mon Sep 17 00:00:00 2001 From: Wesley Wigham Date: Fri, 25 Jan 2019 15:22:35 -0800 Subject: [PATCH 49/49] Include index signatures of the source in mapped type template target inferences (#29253) --- src/compiler/checker.ts | 7 ++++++- src/compiler/core.ts | 7 +++++-- .../mappedToToIndexSignatureInference.js | 8 ++++++++ .../mappedToToIndexSignatureInference.symbols | 18 ++++++++++++++++++ .../mappedToToIndexSignatureInference.types | 14 ++++++++++++++ .../mappedToToIndexSignatureInference.ts | 3 +++ 6 files changed, 54 insertions(+), 3 deletions(-) create mode 100644 tests/baselines/reference/mappedToToIndexSignatureInference.js create mode 100644 tests/baselines/reference/mappedToToIndexSignatureInference.symbols create mode 100644 tests/baselines/reference/mappedToToIndexSignatureInference.types create mode 100644 tests/cases/compiler/mappedToToIndexSignatureInference.ts diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 4c74b60766b..6385d150a3e 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -14574,7 +14574,12 @@ namespace ts { priority |= InferencePriority.MappedTypeConstraint; inferFromTypes(getIndexType(source), constraintType); priority = savePriority; - inferFromTypes(getUnionType(map(getPropertiesOfType(source), getTypeOfSymbol)), getTemplateTypeFromMappedType(target)); + const valueTypes = compact([ + getIndexTypeOfType(source, IndexKind.String), + getIndexTypeOfType(source, IndexKind.Number), + ...map(getPropertiesOfType(source), getTypeOfSymbol) + ]); + inferFromTypes(getUnionType(valueTypes), getTemplateTypeFromMappedType(target)); return true; } return false; diff --git a/src/compiler/core.ts b/src/compiler/core.ts index d4f5fe9664a..fd4807fc586 100644 --- a/src/compiler/core.ts +++ b/src/compiler/core.ts @@ -884,8 +884,11 @@ namespace ts { /** * Compacts an array, removing any falsey elements. */ - export function compact(array: T[]): T[]; - export function compact(array: ReadonlyArray): ReadonlyArray; + export function compact(array: (T | undefined | null | false | 0 | "")[]): T[]; + export function compact(array: ReadonlyArray): ReadonlyArray; + // TSLint thinks these can be combined with the above - they cannot; they'd produce higher-priority inferences and prevent the falsey types from being stripped + export function compact(array: T[]): T[]; // tslint:disable-line unified-signatures + export function compact(array: ReadonlyArray): ReadonlyArray; // tslint:disable-line unified-signatures export function compact(array: T[]): T[] { let result: T[] | undefined; if (array) { diff --git a/tests/baselines/reference/mappedToToIndexSignatureInference.js b/tests/baselines/reference/mappedToToIndexSignatureInference.js new file mode 100644 index 00000000000..2ea09b663a9 --- /dev/null +++ b/tests/baselines/reference/mappedToToIndexSignatureInference.js @@ -0,0 +1,8 @@ +//// [mappedToToIndexSignatureInference.ts] +declare const fn: (object: { [Key in K]: V }) => object; +declare const a: { [index: string]: number }; +fn(a); + + +//// [mappedToToIndexSignatureInference.js] +fn(a); diff --git a/tests/baselines/reference/mappedToToIndexSignatureInference.symbols b/tests/baselines/reference/mappedToToIndexSignatureInference.symbols new file mode 100644 index 00000000000..d071f3f4c1c --- /dev/null +++ b/tests/baselines/reference/mappedToToIndexSignatureInference.symbols @@ -0,0 +1,18 @@ +=== tests/cases/compiler/mappedToToIndexSignatureInference.ts === +declare const fn: (object: { [Key in K]: V }) => object; +>fn : Symbol(fn, Decl(mappedToToIndexSignatureInference.ts, 0, 13)) +>K : Symbol(K, Decl(mappedToToIndexSignatureInference.ts, 0, 19)) +>V : Symbol(V, Decl(mappedToToIndexSignatureInference.ts, 0, 36)) +>object : Symbol(object, Decl(mappedToToIndexSignatureInference.ts, 0, 40)) +>Key : Symbol(Key, Decl(mappedToToIndexSignatureInference.ts, 0, 51)) +>K : Symbol(K, Decl(mappedToToIndexSignatureInference.ts, 0, 19)) +>V : Symbol(V, Decl(mappedToToIndexSignatureInference.ts, 0, 36)) + +declare const a: { [index: string]: number }; +>a : Symbol(a, Decl(mappedToToIndexSignatureInference.ts, 1, 13)) +>index : Symbol(index, Decl(mappedToToIndexSignatureInference.ts, 1, 20)) + +fn(a); +>fn : Symbol(fn, Decl(mappedToToIndexSignatureInference.ts, 0, 13)) +>a : Symbol(a, Decl(mappedToToIndexSignatureInference.ts, 1, 13)) + diff --git a/tests/baselines/reference/mappedToToIndexSignatureInference.types b/tests/baselines/reference/mappedToToIndexSignatureInference.types new file mode 100644 index 00000000000..35b9b3565e0 --- /dev/null +++ b/tests/baselines/reference/mappedToToIndexSignatureInference.types @@ -0,0 +1,14 @@ +=== tests/cases/compiler/mappedToToIndexSignatureInference.ts === +declare const fn: (object: { [Key in K]: V }) => object; +>fn : (object: { [Key in K]: V; }) => object +>object : { [Key in K]: V; } + +declare const a: { [index: string]: number }; +>a : { [index: string]: number; } +>index : string + +fn(a); +>fn(a) : object +>fn : (object: { [Key in K]: V; }) => object +>a : { [index: string]: number; } + diff --git a/tests/cases/compiler/mappedToToIndexSignatureInference.ts b/tests/cases/compiler/mappedToToIndexSignatureInference.ts new file mode 100644 index 00000000000..6ce63ead59c --- /dev/null +++ b/tests/cases/compiler/mappedToToIndexSignatureInference.ts @@ -0,0 +1,3 @@ +declare const fn: (object: { [Key in K]: V }) => object; +declare const a: { [index: string]: number }; +fn(a);