From d158cbb190c8011c6642d7612a6e6292a43ce714 Mon Sep 17 00:00:00 2001 From: graphemecluster Date: Wed, 3 Aug 2022 08:53:30 +0800 Subject: [PATCH] `Array.isArray` for readonly array --- src/harness/fourslashInterfaceImpl.ts | 1 + src/lib/es2015.iterable.d.ts | 14 +++++++ src/lib/es2017.object.d.ts | 2 +- src/lib/es5.d.ts | 19 ++++++++- .../arrayDestructuringInSwitch1.types | 4 +- .../reference/arrayTypeOfTypeOf.types | 4 +- ...ternalTypesProduceUniqueTypeParams.symbols | 4 +- ...InternalTypesProduceUniqueTypeParams.types | 4 +- ...tructuringParameterDeclaration4.errors.txt | 2 +- .../reference/fixSignatureCaching.types | 8 ++-- .../reference/instantiationExpressions.types | 12 +++--- tests/baselines/reference/isArray.js | 2 +- tests/baselines/reference/isArray.symbols | 6 +-- tests/baselines/reference/isArray.types | 12 +++--- ...riptThisAssignmentInStaticBlock.errors.txt | 8 ++-- ...avascriptThisAssignmentInStaticBlock.types | 8 ++-- ...teralFreshnessPropagationOnNarrowing.types | 8 ++-- tests/baselines/reference/malformedTags.types | 4 +- ...ssignmentReadonlyRespectsAssertion.symbols | 4 +- ...gAssignmentReadonlyRespectsAssertion.types | 24 +++++------ .../noIterationTypeErrorsInCFA.symbols | 4 +- .../noIterationTypeErrorsInCFA.types | 4 +- .../reference/objectMethodNullability.types | 12 +++--- .../reference/parserRealSource12.errors.txt | 40 +++++++++---------- .../reference/parserRealSource13.errors.txt | 40 +++++++++---------- .../reference/parserRealSource5.errors.txt | 16 ++++---- .../reference/parserRealSource6.errors.txt | 4 +- .../reference/parserRealSource7.errors.txt | 4 +- .../reference/parserRealSource8.errors.txt | 4 +- tests/baselines/reference/parserharness.types | 8 ++-- .../partiallyDiscriminantedUnions.types | 4 +- .../reference/promisePermutations.errors.txt | 2 +- .../reference/promisePermutations2.errors.txt | 2 +- .../reference/promisePermutations3.errors.txt | 4 +- .../reference/redefineArray.errors.txt | 2 +- .../spreadBooleanRespectsFreshness.types | 4 +- .../reference/unknownControlFlow.types | 8 ++-- tests/cases/compiler/isArray.ts | 2 +- 38 files changed, 173 insertions(+), 141 deletions(-) diff --git a/src/harness/fourslashInterfaceImpl.ts b/src/harness/fourslashInterfaceImpl.ts index 46cedb90b6e99..fd42dee333b59 100644 --- a/src/harness/fourslashInterfaceImpl.ts +++ b/src/harness/fourslashInterfaceImpl.ts @@ -1173,6 +1173,7 @@ namespace FourSlashInterface { typeEntry("Record"), typeEntry("Exclude"), typeEntry("Extract"), + typeEntry("Cast"), typeEntry("Omit"), typeEntry("NonNullable"), typeEntry("Parameters"), diff --git a/src/lib/es2015.iterable.d.ts b/src/lib/es2015.iterable.d.ts index f01d12be889bd..4d9b13a95adfe 100644 --- a/src/lib/es2015.iterable.d.ts +++ b/src/lib/es2015.iterable.d.ts @@ -56,6 +56,20 @@ interface Array { } interface ArrayConstructor { + /** + * Determines whether an object is an array. + * @param arg The object to test. + */ + isArray(arg: T): arg is Cast< + 0 extends (1 & T) ? any[] : + T extends readonly unknown[] ? T : + T extends string ? never : + T extends Iterable | ArrayLike ? U[] : + unknown extends T ? unknown[] : + never, + T + >; + /** * Creates an array from an array-like or iterable object. * @param source An array-like or iterable object to convert to an array. diff --git a/src/lib/es2017.object.d.ts b/src/lib/es2017.object.d.ts index d0a85b406a1c5..3e5dcc95629fe 100644 --- a/src/lib/es2017.object.d.ts +++ b/src/lib/es2017.object.d.ts @@ -27,5 +27,5 @@ interface ObjectConstructor { * Returns an object containing all own property descriptors of an object * @param o Object that contains the properties and methods. This can be an object that you created or an existing Document Object Model (DOM) object. */ - getOwnPropertyDescriptors(o: T): { [P in keyof T]: TypedPropertyDescriptor } & { [x: string]: PropertyDescriptor }; + getOwnPropertyDescriptors(o: T): { [P in keyof T]: TypedPropertyDescriptor } & PropertyDescriptorMap; } diff --git a/src/lib/es5.d.ts b/src/lib/es5.d.ts index 3050eaa94d66c..f814fe893a7c7 100644 --- a/src/lib/es5.d.ts +++ b/src/lib/es5.d.ts @@ -1495,7 +1495,19 @@ interface ArrayConstructor { (arrayLength?: number): any[]; (arrayLength: number): T[]; (...items: T[]): T[]; - isArray(arg: any): arg is any[]; + /** + * Determines whether an object is an array. + * @param arg The object to test. + */ + isArray(arg: T): arg is Cast< + 0 extends (1 & T) ? any[] : + T extends readonly unknown[] ? T : + T extends string ? never : + T extends ArrayLike ? U[] : + unknown extends T ? unknown[] : + never, + T + >; readonly prototype: any[]; } @@ -1615,6 +1627,11 @@ type Exclude = T extends U ? never : T; */ type Extract = T extends U ? T : never; +/** + * Make sure T is at least assignable to U + */ +type Cast = T extends U ? T : U; + /** * Construct a type with the properties of T except for those in type K. */ diff --git a/tests/baselines/reference/arrayDestructuringInSwitch1.types b/tests/baselines/reference/arrayDestructuringInSwitch1.types index 56d48f6a30075..6a63241f3d5f6 100644 --- a/tests/baselines/reference/arrayDestructuringInSwitch1.types +++ b/tests/baselines/reference/arrayDestructuringInSwitch1.types @@ -11,9 +11,9 @@ export function evaluate(expression: Expression): boolean { if (Array.isArray(expression)) { >Array.isArray(expression) : boolean ->Array.isArray : (arg: any) => arg is any[] +>Array.isArray : (arg: T) => arg is Cast<0 extends 1 & T ? any[] : T extends readonly unknown[] ? T : T extends string ? never : T extends ArrayLike ? U[] : unknown extends T ? unknown[] : never, T> >Array : ArrayConstructor ->isArray : (arg: any) => arg is any[] +>isArray : (arg: T) => arg is Cast<0 extends 1 & T ? any[] : T extends readonly unknown[] ? T : T extends string ? never : T extends ArrayLike ? U[] : unknown extends T ? unknown[] : never, T> >expression : Expression const [operator, ...operands] = expression; diff --git a/tests/baselines/reference/arrayTypeOfTypeOf.types b/tests/baselines/reference/arrayTypeOfTypeOf.types index 60eec5fbba21b..c5146da8cbf42 100644 --- a/tests/baselines/reference/arrayTypeOfTypeOf.types +++ b/tests/baselines/reference/arrayTypeOfTypeOf.types @@ -14,11 +14,11 @@ var xs2: typeof Array; >Array : ArrayConstructor var xs3: typeof Array; ->xs3 : { (arrayLength: number): number[]; (...items: number[]): number[]; new (arrayLength: number): number[]; new (...items: number[]): number[]; isArray(arg: any): arg is any[]; readonly prototype: any[]; } +>xs3 : { (arrayLength: number): number[]; (...items: number[]): number[]; new (arrayLength: number): number[]; new (...items: number[]): number[]; isArray(arg: T): arg is Cast<0 extends 1 & T ? any[] : T extends readonly unknown[] ? T : T extends string ? never : T extends ArrayLike ? U[] : unknown extends T ? unknown[] : never, T>; readonly prototype: any[]; } >Array : ArrayConstructor var xs4: typeof Array; ->xs4 : { (arrayLength: number): number[]; (...items: number[]): number[]; new (arrayLength: number): number[]; new (...items: number[]): number[]; isArray(arg: any): arg is any[]; readonly prototype: any[]; } +>xs4 : { (arrayLength: number): number[]; (...items: number[]): number[]; new (arrayLength: number): number[]; new (...items: number[]): number[]; isArray(arg: T): arg is Cast<0 extends 1 & T ? any[] : T extends readonly unknown[] ? T : T extends string ? never : T extends ArrayLike ? U[] : unknown extends T ? unknown[] : never, T>; readonly prototype: any[]; } >Array : ArrayConstructor >x : number diff --git a/tests/baselines/reference/declarationsWithRecursiveInternalTypesProduceUniqueTypeParams.symbols b/tests/baselines/reference/declarationsWithRecursiveInternalTypesProduceUniqueTypeParams.symbols index bfbdd6084157c..907aa2d14ee90 100644 --- a/tests/baselines/reference/declarationsWithRecursiveInternalTypesProduceUniqueTypeParams.symbols +++ b/tests/baselines/reference/declarationsWithRecursiveInternalTypesProduceUniqueTypeParams.symbols @@ -79,9 +79,9 @@ export const updateIfChanged = (t: T) => { >Object.assign : Symbol(ObjectConstructor.assign, Decl(lib.es2015.core.d.ts, --, --), Decl(lib.es2015.core.d.ts, --, --), Decl(lib.es2015.core.d.ts, --, --), Decl(lib.es2015.core.d.ts, --, --), Decl(lib.es2015.core.d.ts, --, --)) >Object : Symbol(Object, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --)) >assign : Symbol(ObjectConstructor.assign, Decl(lib.es2015.core.d.ts, --, --), Decl(lib.es2015.core.d.ts, --, --), Decl(lib.es2015.core.d.ts, --, --), Decl(lib.es2015.core.d.ts, --, --), Decl(lib.es2015.core.d.ts, --, --)) ->Array.isArray : Symbol(ArrayConstructor.isArray, Decl(lib.es5.d.ts, --, --)) +>Array.isArray : Symbol(ArrayConstructor.isArray, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) >Array : Symbol(Array, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.core.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --)) ->isArray : Symbol(ArrayConstructor.isArray, Decl(lib.es5.d.ts, --, --)) +>isArray : Symbol(ArrayConstructor.isArray, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) >u : Symbol(u, Decl(declarationsWithRecursiveInternalTypesProduceUniqueTypeParams.ts, 7, 23)) >u : Symbol(u, Decl(declarationsWithRecursiveInternalTypesProduceUniqueTypeParams.ts, 7, 23)) >[key] : Symbol([key], Decl(declarationsWithRecursiveInternalTypesProduceUniqueTypeParams.ts, 12, 80)) diff --git a/tests/baselines/reference/declarationsWithRecursiveInternalTypesProduceUniqueTypeParams.types b/tests/baselines/reference/declarationsWithRecursiveInternalTypesProduceUniqueTypeParams.types index 1bef7f2379546..16c50d72ecb22 100644 --- a/tests/baselines/reference/declarationsWithRecursiveInternalTypesProduceUniqueTypeParams.types +++ b/tests/baselines/reference/declarationsWithRecursiveInternalTypesProduceUniqueTypeParams.types @@ -67,9 +67,9 @@ export const updateIfChanged = (t: T) => { >assign : { (target: T): T; (target: T, source: U): T & Writable; (target: T, source1: U, source2: V): T & Writable & Writable; (target: T, source1: U, source2: V, source3: W): T & Writable & Writable & Writable; (target: {}, ...sources: any[]): any; } >Array.isArray(u) ? [] : {} : undefined[] | {} >Array.isArray(u) : boolean ->Array.isArray : (arg: any) => arg is any[] +>Array.isArray : { (arg: T): arg is Cast<0 extends 1 & T ? any[] : T extends readonly unknown[] ? T : T extends string ? never : T extends ArrayLike ? U[] : unknown extends T ? unknown[] : never, T>; (arg: T): arg is Cast<0 extends 1 & T ? any[] : T extends readonly unknown[] ? T : T extends string ? never : T extends Iterable | ArrayLike ? U[] : unknown extends T ? unknown[] : never, T>; } >Array : ArrayConstructor ->isArray : (arg: any) => arg is any[] +>isArray : { (arg: T): arg is Cast<0 extends 1 & T ? any[] : T extends readonly unknown[] ? T : T extends string ? never : T extends ArrayLike ? U[] : unknown extends T ? unknown[] : never, T>; (arg: T): arg is Cast<0 extends 1 & T ? any[] : T extends readonly unknown[] ? T : T extends string ? never : T extends Iterable | ArrayLike ? U[] : unknown extends T ? unknown[] : never, T>; } >u : U >[] : undefined[] >{} : {} diff --git a/tests/baselines/reference/destructuringParameterDeclaration4.errors.txt b/tests/baselines/reference/destructuringParameterDeclaration4.errors.txt index 3a77d28fca8ab..6f938e95ed69c 100644 --- a/tests/baselines/reference/destructuringParameterDeclaration4.errors.txt +++ b/tests/baselines/reference/destructuringParameterDeclaration4.errors.txt @@ -41,7 +41,7 @@ tests/cases/conformance/es6/destructuring/destructuringParameterDeclaration4.ts( a1(...array2); // Error parameter type is (number|string)[] ~~~~~~ !!! error TS2552: Cannot find name 'array2'. Did you mean 'Array'? -!!! related TS2728 /.ts/lib.es5.d.ts:1522:13: 'Array' is declared here. +!!! related TS2728 /.ts/lib.es5.d.ts:1534:13: 'Array' is declared here. a5([1, 2, "string", false, true]); // Error, parameter type is [any, any, [[any]]] ~~~~~~~~ !!! error TS2322: Type 'string' is not assignable to type '[[any]]'. diff --git a/tests/baselines/reference/fixSignatureCaching.types b/tests/baselines/reference/fixSignatureCaching.types index 06ab4f3df7eee..b3baa26facac7 100644 --- a/tests/baselines/reference/fixSignatureCaching.types +++ b/tests/baselines/reference/fixSignatureCaching.types @@ -1109,9 +1109,9 @@ define(function () { >Array : ArrayConstructor Array.isArray : function (value) { return Object.prototype.toString.call(value) === '[object Array]'; }; ->Array.isArray : (arg: any) => arg is any[] +>Array.isArray : (arg: T) => arg is Cast<0 extends 1 & T ? any[] : T extends readonly unknown[] ? T : T extends string ? never : T extends ArrayLike ? U[] : unknown extends T ? unknown[] : never, T> >Array : ArrayConstructor ->isArray : (arg: any) => arg is any[] +>isArray : (arg: T) => arg is Cast<0 extends 1 & T ? any[] : T extends readonly unknown[] ? T : T extends string ? never : T extends ArrayLike ? U[] : unknown extends T ? unknown[] : never, T> >function (value) { return Object.prototype.toString.call(value) === '[object Array]'; } : (value: any) => boolean >value : any >Object.prototype.toString.call(value) === '[object Array]' : boolean @@ -1150,9 +1150,9 @@ define(function () { >'[object Array]' : "[object Array]" : Array.isArray; ->Array.isArray : (arg: any) => arg is any[] +>Array.isArray : (arg: T) => arg is Cast<0 extends 1 & T ? any[] : T extends readonly unknown[] ? T : T extends string ? never : T extends ArrayLike ? U[] : unknown extends T ? unknown[] : never, T> >Array : ArrayConstructor ->isArray : (arg: any) => arg is any[] +>isArray : (arg: T) => arg is Cast<0 extends 1 & T ? any[] : T extends readonly unknown[] ? T : T extends string ? never : T extends ArrayLike ? U[] : unknown extends T ? unknown[] : never, T> function equalIC(a, b) { >equalIC : (a: any, b: any) => boolean diff --git a/tests/baselines/reference/instantiationExpressions.types b/tests/baselines/reference/instantiationExpressions.types index 75fe72fc441bc..bba25289784e0 100644 --- a/tests/baselines/reference/instantiationExpressions.types +++ b/tests/baselines/reference/instantiationExpressions.types @@ -61,13 +61,13 @@ function f2() { >Array : ArrayConstructor const A1 = Array; // new (...) => string[] ->A1 : { (arrayLength: number): string[]; (...items: string[]): string[]; new (arrayLength: number): string[]; new (...items: string[]): string[]; isArray(arg: any): arg is any[]; readonly prototype: any[]; } ->Array : { (arrayLength: number): string[]; (...items: string[]): string[]; new (arrayLength: number): string[]; new (...items: string[]): string[]; isArray(arg: any): arg is any[]; readonly prototype: any[]; } +>A1 : { (arrayLength: number): string[]; (...items: string[]): string[]; new (arrayLength: number): string[]; new (...items: string[]): string[]; isArray(arg: T): arg is Cast<0 extends 1 & T ? any[] : T extends readonly unknown[] ? T : T extends string ? never : T extends ArrayLike ? U[] : unknown extends T ? unknown[] : never, T>; readonly prototype: any[]; } +>Array : { (arrayLength: number): string[]; (...items: string[]): string[]; new (arrayLength: number): string[]; new (...items: string[]): string[]; isArray(arg: T): arg is Cast<0 extends 1 & T ? any[] : T extends readonly unknown[] ? T : T extends string ? never : T extends ArrayLike ? U[] : unknown extends T ? unknown[] : never, T>; readonly prototype: any[]; } >Array : ArrayConstructor const A2 = Array; // Error ->A2 : { isArray(arg: any): arg is any[]; readonly prototype: any[]; } ->Array : { isArray(arg: any): arg is any[]; readonly prototype: any[]; } +>A2 : { isArray(arg: T): arg is Cast<0 extends 1 & T ? any[] : T extends readonly unknown[] ? T : T extends string ? never : T extends ArrayLike ? U[] : unknown extends T ? unknown[] : never, T>; readonly prototype: any[]; } +>Array : { isArray(arg: T): arg is Cast<0 extends 1 & T ? any[] : T extends readonly unknown[] ? T : T extends string ? never : T extends ArrayLike ? U[] : unknown extends T ? unknown[] : never, T>; readonly prototype: any[]; } >Array : ArrayConstructor } @@ -76,11 +76,11 @@ type T20 = typeof Array<>; // Error >Array : ArrayConstructor type T21 = typeof Array; // new (...) => string[] ->T21 : { (arrayLength: number): string[]; (...items: string[]): string[]; new (arrayLength: number): string[]; new (...items: string[]): string[]; isArray(arg: any): arg is any[]; readonly prototype: any[]; } +>T21 : { (arrayLength: number): string[]; (...items: string[]): string[]; new (arrayLength: number): string[]; new (...items: string[]): string[]; isArray(arg: T): arg is Cast<0 extends 1 & T ? any[] : T extends readonly unknown[] ? T : T extends string ? never : T extends ArrayLike ? U[] : unknown extends T ? unknown[] : never, T>; readonly prototype: any[]; } >Array : ArrayConstructor type T22 = typeof Array; // Error ->T22 : { isArray(arg: any): arg is any[]; readonly prototype: any[]; } +>T22 : { isArray(arg: T): arg is Cast<0 extends 1 & T ? any[] : T extends readonly unknown[] ? T : T extends string ? never : T extends ArrayLike ? U[] : unknown extends T ? unknown[] : never, T>; readonly prototype: any[]; } >Array : ArrayConstructor declare class C { diff --git a/tests/baselines/reference/isArray.js b/tests/baselines/reference/isArray.js index a90898fd65b26..af94922d01621 100644 --- a/tests/baselines/reference/isArray.js +++ b/tests/baselines/reference/isArray.js @@ -1,5 +1,5 @@ //// [isArray.ts] -var maybeArray: number | number[]; +var maybeArray: number | number[] | readonly string[]; if (Array.isArray(maybeArray)) { diff --git a/tests/baselines/reference/isArray.symbols b/tests/baselines/reference/isArray.symbols index 411cb42918daa..11aa56f60e3f2 100644 --- a/tests/baselines/reference/isArray.symbols +++ b/tests/baselines/reference/isArray.symbols @@ -1,5 +1,5 @@ === tests/cases/compiler/isArray.ts === -var maybeArray: number | number[]; +var maybeArray: number | number[] | readonly string[]; >maybeArray : Symbol(maybeArray, Decl(isArray.ts, 0, 3)) @@ -10,9 +10,9 @@ if (Array.isArray(maybeArray)) { >maybeArray : Symbol(maybeArray, Decl(isArray.ts, 0, 3)) maybeArray.length; // OK ->maybeArray.length : Symbol(Array.length, Decl(lib.es5.d.ts, --, --)) +>maybeArray.length : Symbol(length, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --)) >maybeArray : Symbol(maybeArray, Decl(isArray.ts, 0, 3)) ->length : Symbol(Array.length, Decl(lib.es5.d.ts, --, --)) +>length : Symbol(length, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --)) } else { maybeArray.toFixed(); // OK diff --git a/tests/baselines/reference/isArray.types b/tests/baselines/reference/isArray.types index bc452b12bef01..1305961bbde61 100644 --- a/tests/baselines/reference/isArray.types +++ b/tests/baselines/reference/isArray.types @@ -1,18 +1,18 @@ === tests/cases/compiler/isArray.ts === -var maybeArray: number | number[]; ->maybeArray : number | number[] +var maybeArray: number | number[] | readonly string[]; +>maybeArray : number | number[] | readonly string[] if (Array.isArray(maybeArray)) { >Array.isArray(maybeArray) : boolean ->Array.isArray : (arg: any) => arg is any[] +>Array.isArray : (arg: T) => arg is Cast<0 extends 1 & T ? any[] : T extends readonly unknown[] ? T : T extends string ? never : T extends ArrayLike ? U[] : unknown extends T ? unknown[] : never, T> >Array : ArrayConstructor ->isArray : (arg: any) => arg is any[] ->maybeArray : number | number[] +>isArray : (arg: T) => arg is Cast<0 extends 1 & T ? any[] : T extends readonly unknown[] ? T : T extends string ? never : T extends ArrayLike ? U[] : unknown extends T ? unknown[] : never, T> +>maybeArray : number | number[] | readonly string[] maybeArray.length; // OK >maybeArray.length : number ->maybeArray : number[] +>maybeArray : number[] | readonly string[] >length : number } else { diff --git a/tests/baselines/reference/javascriptThisAssignmentInStaticBlock.errors.txt b/tests/baselines/reference/javascriptThisAssignmentInStaticBlock.errors.txt index a4729d56ef55b..949b068305040 100644 --- a/tests/baselines/reference/javascriptThisAssignmentInStaticBlock.errors.txt +++ b/tests/baselines/reference/javascriptThisAssignmentInStaticBlock.errors.txt @@ -1,6 +1,6 @@ -/src/a.js(10,7): error TS2417: Class static side 'typeof ElementsArray' incorrectly extends base class static side '{ isArray(arg: any): arg is any[]; readonly prototype: any[]; }'. +/src/a.js(10,7): error TS2417: Class static side 'typeof ElementsArray' incorrectly extends base class static side '{ isArray(arg: T): arg is Cast<0 extends 1 & T ? any[] : T extends readonly unknown[] ? T : T extends string ? never : T extends ArrayLike ? U[] : unknown extends T ? unknown[] : never, T>; readonly prototype: any[]; }'. Types of property 'isArray' are incompatible. - Type '(arg: any) => boolean' is not assignable to type '(arg: any) => arg is any[]'. + Type '(arg: any) => boolean' is not assignable to type '(arg: T) => arg is Cast<0 extends 1 & T ? any[] : T extends readonly unknown[] ? T : T extends string ? never : T extends ArrayLike ? U[] : unknown extends T ? unknown[] : never, T>'. Signature '(arg: any): boolean' must be a type predicate. @@ -16,9 +16,9 @@ // GH#46468 class ElementsArray extends Array { ~~~~~~~~~~~~~ -!!! error TS2417: Class static side 'typeof ElementsArray' incorrectly extends base class static side '{ isArray(arg: any): arg is any[]; readonly prototype: any[]; }'. +!!! error TS2417: Class static side 'typeof ElementsArray' incorrectly extends base class static side '{ isArray(arg: T): arg is Cast<0 extends 1 & T ? any[] : T extends readonly unknown[] ? T : T extends string ? never : T extends ArrayLike ? U[] : unknown extends T ? unknown[] : never, T>; readonly prototype: any[]; }'. !!! error TS2417: Types of property 'isArray' are incompatible. -!!! error TS2417: Type '(arg: any) => boolean' is not assignable to type '(arg: any) => arg is any[]'. +!!! error TS2417: Type '(arg: any) => boolean' is not assignable to type '(arg: T) => arg is Cast<0 extends 1 & T ? any[] : T extends readonly unknown[] ? T : T extends string ? never : T extends ArrayLike ? U[] : unknown extends T ? unknown[] : never, T>'. !!! error TS2417: Signature '(arg: any): boolean' must be a type predicate. static { const superisArray = super.isArray; diff --git a/tests/baselines/reference/javascriptThisAssignmentInStaticBlock.types b/tests/baselines/reference/javascriptThisAssignmentInStaticBlock.types index bbb41f4ea47fd..050b1d2fd9b63 100644 --- a/tests/baselines/reference/javascriptThisAssignmentInStaticBlock.types +++ b/tests/baselines/reference/javascriptThisAssignmentInStaticBlock.types @@ -25,17 +25,17 @@ class ElementsArray extends Array { static { const superisArray = super.isArray; ->superisArray : (arg: any) => arg is any[] ->super.isArray : (arg: any) => arg is any[] +>superisArray : (arg: T) => arg is Cast<0 extends 1 & T ? any[] : T extends readonly unknown[] ? T : T extends string ? never : T extends ArrayLike ? U[] : unknown extends T ? unknown[] : never, T> +>super.isArray : (arg: T) => arg is Cast<0 extends 1 & T ? any[] : T extends readonly unknown[] ? T : T extends string ? never : T extends ArrayLike ? U[] : unknown extends T ? unknown[] : never, T> >super : ArrayConstructor ->isArray : (arg: any) => arg is any[] +>isArray : (arg: T) => arg is Cast<0 extends 1 & T ? any[] : T extends readonly unknown[] ? T : T extends string ? never : T extends ArrayLike ? U[] : unknown extends T ? unknown[] : never, T> const customIsArray = (arg)=> superisArray(arg); >customIsArray : (arg: any) => boolean >(arg)=> superisArray(arg) : (arg: any) => boolean >arg : any >superisArray(arg) : boolean ->superisArray : (arg: any) => arg is any[] +>superisArray : (arg: T) => arg is Cast<0 extends 1 & T ? any[] : T extends readonly unknown[] ? T : T extends string ? never : T extends ArrayLike ? U[] : unknown extends T ? unknown[] : never, T> >arg : any this.isArray = customIsArray; diff --git a/tests/baselines/reference/literalFreshnessPropagationOnNarrowing.types b/tests/baselines/reference/literalFreshnessPropagationOnNarrowing.types index fd3858baebc68..de72c4bce86d8 100644 --- a/tests/baselines/reference/literalFreshnessPropagationOnNarrowing.types +++ b/tests/baselines/reference/literalFreshnessPropagationOnNarrowing.types @@ -66,9 +66,9 @@ function f2() { >a4 : (string | false) | (string | false)[] >Array.isArray(elOrA) ? elOrA : [elOrA] : (string | false)[] >Array.isArray(elOrA) : boolean ->Array.isArray : (arg: any) => arg is any[] +>Array.isArray : (arg: T) => arg is Cast<0 extends 1 & T ? any[] : T extends readonly unknown[] ? T : T extends string ? never : T extends ArrayLike ? U[] : unknown extends T ? unknown[] : never, T> >Array : ArrayConstructor ->isArray : (arg: any) => arg is any[] +>isArray : (arg: T) => arg is Cast<0 extends 1 & T ? any[] : T extends readonly unknown[] ? T : T extends string ? never : T extends ArrayLike ? U[] : unknown extends T ? unknown[] : never, T> >elOrA : (string | false) | (string | false)[] >elOrA : (string | false)[] >[elOrA] : (string | false)[] @@ -83,9 +83,9 @@ function f2() { >...Array.isArray(elOrA) ? elOrA : [elOrA] : string | false >Array.isArray(elOrA) ? elOrA : [elOrA] : (string | false)[] >Array.isArray(elOrA) : boolean ->Array.isArray : (arg: any) => arg is any[] +>Array.isArray : (arg: T) => arg is Cast<0 extends 1 & T ? any[] : T extends readonly unknown[] ? T : T extends string ? never : T extends ArrayLike ? U[] : unknown extends T ? unknown[] : never, T> >Array : ArrayConstructor ->isArray : (arg: any) => arg is any[] +>isArray : (arg: T) => arg is Cast<0 extends 1 & T ? any[] : T extends readonly unknown[] ? T : T extends string ? never : T extends ArrayLike ? U[] : unknown extends T ? unknown[] : never, T> >elOrA : (string | false) | (string | false)[] >elOrA : (string | false)[] >[elOrA] : (string | false)[] diff --git a/tests/baselines/reference/malformedTags.types b/tests/baselines/reference/malformedTags.types index c3af959586790..fd257dd3acbc6 100644 --- a/tests/baselines/reference/malformedTags.types +++ b/tests/baselines/reference/malformedTags.types @@ -6,7 +6,7 @@ */ var isArray = Array.isArray; >isArray : Function ->Array.isArray : (arg: any) => arg is any[] +>Array.isArray : (arg: T) => arg is Cast<0 extends 1 & T ? any[] : T extends readonly unknown[] ? T : T extends string ? never : T extends ArrayLike ? U[] : unknown extends T ? unknown[] : never, T> >Array : ArrayConstructor ->isArray : (arg: any) => arg is any[] +>isArray : (arg: T) => arg is Cast<0 extends 1 & T ? any[] : T extends readonly unknown[] ? T : T extends string ? never : T extends ArrayLike ? U[] : unknown extends T ? unknown[] : never, T> diff --git a/tests/baselines/reference/narrowingAssignmentReadonlyRespectsAssertion.symbols b/tests/baselines/reference/narrowingAssignmentReadonlyRespectsAssertion.symbols index 8b7fcfebae44f..268a658b8f0c7 100644 --- a/tests/baselines/reference/narrowingAssignmentReadonlyRespectsAssertion.symbols +++ b/tests/baselines/reference/narrowingAssignmentReadonlyRespectsAssertion.symbols @@ -91,9 +91,9 @@ function testFunc() { const reversedVal1 = val1.slice().reverse(); >reversedVal1 : Symbol(reversedVal1, Decl(narrowingAssignmentReadonlyRespectsAssertion.ts, 29, 15)) >val1.slice().reverse : Symbol(Array.reverse, Decl(lib.es5.d.ts, --, --)) ->val1.slice : Symbol(Array.slice, Decl(lib.es5.d.ts, --, --)) +>val1.slice : Symbol(ReadonlyArray.slice, Decl(lib.es5.d.ts, --, --)) >val1 : Symbol(val1, Decl(narrowingAssignmentReadonlyRespectsAssertion.ts, 26, 26)) ->slice : Symbol(Array.slice, Decl(lib.es5.d.ts, --, --)) +>slice : Symbol(ReadonlyArray.slice, Decl(lib.es5.d.ts, --, --)) >reverse : Symbol(Array.reverse, Decl(lib.es5.d.ts, --, --)) console.log(reversedVal1); diff --git a/tests/baselines/reference/narrowingAssignmentReadonlyRespectsAssertion.types b/tests/baselines/reference/narrowingAssignmentReadonlyRespectsAssertion.types index 9fd13d661027a..287692c30dd69 100644 --- a/tests/baselines/reference/narrowingAssignmentReadonlyRespectsAssertion.types +++ b/tests/baselines/reference/narrowingAssignmentReadonlyRespectsAssertion.types @@ -100,28 +100,28 @@ function testFunc() { if (Array.isArray(val1)) { >Array.isArray(val1) : boolean ->Array.isArray : (arg: any) => arg is any[] +>Array.isArray : (arg: T) => arg is Cast<0 extends 1 & T ? any[] : T extends readonly unknown[] ? T : T extends string ? never : T extends ArrayLike ? U[] : unknown extends T ? unknown[] : never, T> >Array : ArrayConstructor ->isArray : (arg: any) => arg is any[] +>isArray : (arg: T) => arg is Cast<0 extends 1 & T ? any[] : T extends readonly unknown[] ? T : T extends string ? never : T extends ArrayLike ? U[] : unknown extends T ? unknown[] : never, T> >val1 : string | number | readonly (string | number)[] // This should retain val1 as being an array const reversedVal1 = val1.slice().reverse(); ->reversedVal1 : any[] ->val1.slice().reverse() : any[] ->val1.slice().reverse : () => any[] ->val1.slice() : any[] ->val1.slice : (start?: number, end?: number) => any[] ->val1 : any[] ->slice : (start?: number, end?: number) => any[] ->reverse : () => any[] +>reversedVal1 : (string | number)[] +>val1.slice().reverse() : (string | number)[] +>val1.slice().reverse : () => (string | number)[] +>val1.slice() : (string | number)[] +>val1.slice : (start?: number, end?: number) => (string | number)[] +>val1 : readonly (string | number)[] +>slice : (start?: number, end?: number) => (string | number)[] +>reverse : () => (string | number)[] console.log(reversedVal1); >console.log(reversedVal1) : void >console.log : (...data: any[]) => void >console : Console >log : (...data: any[]) => void ->reversedVal1 : any[] +>reversedVal1 : (string | number)[] } else { console.log(val1); @@ -129,7 +129,7 @@ function testFunc() { >console.log : (...data: any[]) => void >console : Console >log : (...data: any[]) => void ->val1 : string | number | readonly (string | number)[] +>val1 : string | number } console.log(val2); >console.log(val2) : void diff --git a/tests/baselines/reference/noIterationTypeErrorsInCFA.symbols b/tests/baselines/reference/noIterationTypeErrorsInCFA.symbols index 60040c3ed17c4..e4c1ff3d9f2a0 100644 --- a/tests/baselines/reference/noIterationTypeErrorsInCFA.symbols +++ b/tests/baselines/reference/noIterationTypeErrorsInCFA.symbols @@ -12,9 +12,9 @@ export function doRemove(dds: F | F[]) { >F : Symbol(F, Decl(noIterationTypeErrorsInCFA.ts, 0, 0)) if (!Array.isArray(dds)) { ->Array.isArray : Symbol(ArrayConstructor.isArray, Decl(lib.es5.d.ts, --, --)) +>Array.isArray : Symbol(ArrayConstructor.isArray, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) >Array : Symbol(Array, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.core.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --) ... and 3 more) ->isArray : Symbol(ArrayConstructor.isArray, Decl(lib.es5.d.ts, --, --)) +>isArray : Symbol(ArrayConstructor.isArray, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) >dds : Symbol(dds, Decl(noIterationTypeErrorsInCFA.ts, 3, 25)) dds = [dds] diff --git a/tests/baselines/reference/noIterationTypeErrorsInCFA.types b/tests/baselines/reference/noIterationTypeErrorsInCFA.types index 9d0122627ffae..a6993427edf1b 100644 --- a/tests/baselines/reference/noIterationTypeErrorsInCFA.types +++ b/tests/baselines/reference/noIterationTypeErrorsInCFA.types @@ -10,9 +10,9 @@ export function doRemove(dds: F | F[]) { if (!Array.isArray(dds)) { >!Array.isArray(dds) : boolean >Array.isArray(dds) : boolean ->Array.isArray : (arg: any) => arg is any[] +>Array.isArray : { (arg: T): arg is Cast<0 extends 1 & T ? any[] : T extends readonly unknown[] ? T : T extends string ? never : T extends ArrayLike ? U[] : unknown extends T ? unknown[] : never, T>; (arg: T): arg is Cast<0 extends 1 & T ? any[] : T extends readonly unknown[] ? T : T extends string ? never : T extends Iterable | ArrayLike ? U[] : unknown extends T ? unknown[] : never, T>; } >Array : ArrayConstructor ->isArray : (arg: any) => arg is any[] +>isArray : { (arg: T): arg is Cast<0 extends 1 & T ? any[] : T extends readonly unknown[] ? T : T extends string ? never : T extends ArrayLike ? U[] : unknown extends T ? unknown[] : never, T>; (arg: T): arg is Cast<0 extends 1 & T ? any[] : T extends readonly unknown[] ? T : T extends string ? never : T extends Iterable | ArrayLike ? U[] : unknown extends T ? unknown[] : never, T>; } >dds : F | F[] dds = [dds] diff --git a/tests/baselines/reference/objectMethodNullability.types b/tests/baselines/reference/objectMethodNullability.types index f4a954e706de2..4acb625bbeff9 100644 --- a/tests/baselines/reference/objectMethodNullability.types +++ b/tests/baselines/reference/objectMethodNullability.types @@ -48,10 +48,10 @@ Object.getOwnPropertyDescriptor(undefined, "foo"); >"foo" : "foo" Object.getOwnPropertyDescriptors(undefined); ->Object.getOwnPropertyDescriptors(undefined) : {} & { [x: string]: PropertyDescriptor; } ->Object.getOwnPropertyDescriptors : (o: T) => { [P in keyof T]: TypedPropertyDescriptor; } & { [x: string]: PropertyDescriptor; } +>Object.getOwnPropertyDescriptors(undefined) : {} & PropertyDescriptorMap +>Object.getOwnPropertyDescriptors : (o: T) => { [P in keyof T]: TypedPropertyDescriptor; } & PropertyDescriptorMap >Object : ObjectConstructor ->getOwnPropertyDescriptors : (o: T) => { [P in keyof T]: TypedPropertyDescriptor; } & { [x: string]: PropertyDescriptor; } +>getOwnPropertyDescriptors : (o: T) => { [P in keyof T]: TypedPropertyDescriptor; } & PropertyDescriptorMap >undefined : undefined Object.getOwnPropertyNames(undefined); @@ -154,10 +154,10 @@ Object.getOwnPropertyDescriptor(0, "foo"); >"foo" : "foo" Object.getOwnPropertyDescriptors(0); ->Object.getOwnPropertyDescriptors(0) : number & { [x: string]: PropertyDescriptor; } ->Object.getOwnPropertyDescriptors : (o: T) => { [P in keyof T]: TypedPropertyDescriptor; } & { [x: string]: PropertyDescriptor; } +>Object.getOwnPropertyDescriptors(0) : number & PropertyDescriptorMap +>Object.getOwnPropertyDescriptors : (o: T) => { [P in keyof T]: TypedPropertyDescriptor; } & PropertyDescriptorMap >Object : ObjectConstructor ->getOwnPropertyDescriptors : (o: T) => { [P in keyof T]: TypedPropertyDescriptor; } & { [x: string]: PropertyDescriptor; } +>getOwnPropertyDescriptors : (o: T) => { [P in keyof T]: TypedPropertyDescriptor; } & PropertyDescriptorMap >0 : 0 Object.getOwnPropertyNames(0); diff --git a/tests/baselines/reference/parserRealSource12.errors.txt b/tests/baselines/reference/parserRealSource12.errors.txt index a1e959d38ccd3..008bcd120bc22 100644 --- a/tests/baselines/reference/parserRealSource12.errors.txt +++ b/tests/baselines/reference/parserRealSource12.errors.txt @@ -1,14 +1,14 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource12.ts(4,21): error TS6053: File 'tests/cases/conformance/parser/ecmascript5/typescript.ts' not found. -tests/cases/conformance/parser/ecmascript5/parserRealSource12.ts(8,19): error TS2304: Cannot find name 'AST'. -tests/cases/conformance/parser/ecmascript5/parserRealSource12.ts(8,32): error TS2304: Cannot find name 'AST'. -tests/cases/conformance/parser/ecmascript5/parserRealSource12.ts(8,38): error TS2304: Cannot find name 'AST'. -tests/cases/conformance/parser/ecmascript5/parserRealSource12.ts(25,15): error TS2304: Cannot find name 'AST'. -tests/cases/conformance/parser/ecmascript5/parserRealSource12.ts(25,28): error TS2304: Cannot find name 'AST'. -tests/cases/conformance/parser/ecmascript5/parserRealSource12.ts(25,54): error TS2304: Cannot find name 'AST'. -tests/cases/conformance/parser/ecmascript5/parserRealSource12.ts(29,18): error TS2304: Cannot find name 'AST'. -tests/cases/conformance/parser/ecmascript5/parserRealSource12.ts(29,31): error TS2304: Cannot find name 'AST'. -tests/cases/conformance/parser/ecmascript5/parserRealSource12.ts(41,26): error TS2304: Cannot find name 'AST'. -tests/cases/conformance/parser/ecmascript5/parserRealSource12.ts(41,39): error TS2304: Cannot find name 'AST'. +tests/cases/conformance/parser/ecmascript5/parserRealSource12.ts(8,19): error TS2552: Cannot find name 'AST'. Did you mean 'Cast'? +tests/cases/conformance/parser/ecmascript5/parserRealSource12.ts(8,32): error TS2552: Cannot find name 'AST'. Did you mean 'Cast'? +tests/cases/conformance/parser/ecmascript5/parserRealSource12.ts(8,38): error TS2552: Cannot find name 'AST'. Did you mean 'Cast'? +tests/cases/conformance/parser/ecmascript5/parserRealSource12.ts(25,15): error TS2552: Cannot find name 'AST'. Did you mean 'Cast'? +tests/cases/conformance/parser/ecmascript5/parserRealSource12.ts(25,28): error TS2552: Cannot find name 'AST'. Did you mean 'Cast'? +tests/cases/conformance/parser/ecmascript5/parserRealSource12.ts(25,54): error TS2552: Cannot find name 'AST'. Did you mean 'Cast'? +tests/cases/conformance/parser/ecmascript5/parserRealSource12.ts(29,18): error TS2552: Cannot find name 'AST'. Did you mean 'Cast'? +tests/cases/conformance/parser/ecmascript5/parserRealSource12.ts(29,31): error TS2552: Cannot find name 'AST'. Did you mean 'Cast'? +tests/cases/conformance/parser/ecmascript5/parserRealSource12.ts(41,26): error TS2552: Cannot find name 'AST'. Did you mean 'Cast'? +tests/cases/conformance/parser/ecmascript5/parserRealSource12.ts(41,39): error TS2552: Cannot find name 'AST'. Did you mean 'Cast'? tests/cases/conformance/parser/ecmascript5/parserRealSource12.ts(41,45): error TS2304: Cannot find name 'AST'. tests/cases/conformance/parser/ecmascript5/parserRealSource12.ts(77,26): error TS2304: Cannot find name 'AST'. tests/cases/conformance/parser/ecmascript5/parserRealSource12.ts(77,119): error TS2304: Cannot find name 'AST'. @@ -221,11 +221,11 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource12.ts(524,30): error export interface IAstWalker { walk(ast: AST, parent: AST): AST; ~~~ -!!! error TS2304: Cannot find name 'AST'. +!!! error TS2552: Cannot find name 'AST'. Did you mean 'Cast'? ~~~ -!!! error TS2304: Cannot find name 'AST'. +!!! error TS2552: Cannot find name 'AST'. Did you mean 'Cast'? ~~~ -!!! error TS2304: Cannot find name 'AST'. +!!! error TS2552: Cannot find name 'AST'. Did you mean 'Cast'? options: AstWalkOptions; state: any; // user state object } @@ -244,19 +244,19 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource12.ts(524,30): error export interface IAstWalkCallback { (ast: AST, parent: AST, walker: IAstWalker): AST; ~~~ -!!! error TS2304: Cannot find name 'AST'. +!!! error TS2552: Cannot find name 'AST'. Did you mean 'Cast'? ~~~ -!!! error TS2304: Cannot find name 'AST'. +!!! error TS2552: Cannot find name 'AST'. Did you mean 'Cast'? ~~~ -!!! error TS2304: Cannot find name 'AST'. +!!! error TS2552: Cannot find name 'AST'. Did you mean 'Cast'? } export interface IAstWalkChildren { (preAst: AST, parent: AST, walker: IAstWalker): void; ~~~ -!!! error TS2304: Cannot find name 'AST'. +!!! error TS2552: Cannot find name 'AST'. Did you mean 'Cast'? ~~~ -!!! error TS2304: Cannot find name 'AST'. +!!! error TS2552: Cannot find name 'AST'. Did you mean 'Cast'? } class AstWalker implements IAstWalker { @@ -270,9 +270,9 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource12.ts(524,30): error public walk(ast: AST, parent: AST): AST { ~~~ -!!! error TS2304: Cannot find name 'AST'. +!!! error TS2552: Cannot find name 'AST'. Did you mean 'Cast'? ~~~ -!!! error TS2304: Cannot find name 'AST'. +!!! error TS2552: Cannot find name 'AST'. Did you mean 'Cast'? ~~~ !!! error TS2304: Cannot find name 'AST'. var preAst = this.pre(ast, parent, this); diff --git a/tests/baselines/reference/parserRealSource13.errors.txt b/tests/baselines/reference/parserRealSource13.errors.txt index a77c57624053b..5d9bd72e78e00 100644 --- a/tests/baselines/reference/parserRealSource13.errors.txt +++ b/tests/baselines/reference/parserRealSource13.errors.txt @@ -1,14 +1,14 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource13.ts(4,21): error TS6053: File 'tests/cases/conformance/parser/ecmascript5/typescript.ts' not found. -tests/cases/conformance/parser/ecmascript5/parserRealSource13.ts(8,35): error TS2304: Cannot find name 'AST'. -tests/cases/conformance/parser/ecmascript5/parserRealSource13.ts(9,39): error TS2304: Cannot find name 'AST'. -tests/cases/conformance/parser/ecmascript5/parserRealSource13.ts(10,34): error TS2304: Cannot find name 'AST'. -tests/cases/conformance/parser/ecmascript5/parserRealSource13.ts(11,35): error TS2304: Cannot find name 'AST'. -tests/cases/conformance/parser/ecmascript5/parserRealSource13.ts(12,34): error TS2304: Cannot find name 'AST'. -tests/cases/conformance/parser/ecmascript5/parserRealSource13.ts(13,35): error TS2304: Cannot find name 'AST'. -tests/cases/conformance/parser/ecmascript5/parserRealSource13.ts(14,37): error TS2304: Cannot find name 'AST'. -tests/cases/conformance/parser/ecmascript5/parserRealSource13.ts(15,35): error TS2304: Cannot find name 'AST'. -tests/cases/conformance/parser/ecmascript5/parserRealSource13.ts(16,34): error TS2304: Cannot find name 'AST'. -tests/cases/conformance/parser/ecmascript5/parserRealSource13.ts(17,38): error TS2304: Cannot find name 'AST'. +tests/cases/conformance/parser/ecmascript5/parserRealSource13.ts(8,35): error TS2552: Cannot find name 'AST'. Did you mean 'Cast'? +tests/cases/conformance/parser/ecmascript5/parserRealSource13.ts(9,39): error TS2552: Cannot find name 'AST'. Did you mean 'Cast'? +tests/cases/conformance/parser/ecmascript5/parserRealSource13.ts(10,34): error TS2552: Cannot find name 'AST'. Did you mean 'Cast'? +tests/cases/conformance/parser/ecmascript5/parserRealSource13.ts(11,35): error TS2552: Cannot find name 'AST'. Did you mean 'Cast'? +tests/cases/conformance/parser/ecmascript5/parserRealSource13.ts(12,34): error TS2552: Cannot find name 'AST'. Did you mean 'Cast'? +tests/cases/conformance/parser/ecmascript5/parserRealSource13.ts(13,35): error TS2552: Cannot find name 'AST'. Did you mean 'Cast'? +tests/cases/conformance/parser/ecmascript5/parserRealSource13.ts(14,37): error TS2552: Cannot find name 'AST'. Did you mean 'Cast'? +tests/cases/conformance/parser/ecmascript5/parserRealSource13.ts(15,35): error TS2552: Cannot find name 'AST'. Did you mean 'Cast'? +tests/cases/conformance/parser/ecmascript5/parserRealSource13.ts(16,34): error TS2552: Cannot find name 'AST'. Did you mean 'Cast'? +tests/cases/conformance/parser/ecmascript5/parserRealSource13.ts(17,38): error TS2552: Cannot find name 'AST'. Did you mean 'Cast'? tests/cases/conformance/parser/ecmascript5/parserRealSource13.ts(18,39): error TS2304: Cannot find name 'AST'. tests/cases/conformance/parser/ecmascript5/parserRealSource13.ts(19,34): error TS2304: Cannot find name 'AST'. tests/cases/conformance/parser/ecmascript5/parserRealSource13.ts(20,35): error TS2304: Cannot find name 'AST'. @@ -128,34 +128,34 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource13.ts(135,36): error export interface AstWalkerDetailCallback { EmptyCallback? (pre, ast: AST): boolean; ~~~ -!!! error TS2304: Cannot find name 'AST'. +!!! error TS2552: Cannot find name 'AST'. Did you mean 'Cast'? EmptyExprCallback? (pre, ast: AST): boolean; ~~~ -!!! error TS2304: Cannot find name 'AST'. +!!! error TS2552: Cannot find name 'AST'. Did you mean 'Cast'? TrueCallback? (pre, ast: AST): boolean; ~~~ -!!! error TS2304: Cannot find name 'AST'. +!!! error TS2552: Cannot find name 'AST'. Did you mean 'Cast'? FalseCallback? (pre, ast: AST): boolean; ~~~ -!!! error TS2304: Cannot find name 'AST'. +!!! error TS2552: Cannot find name 'AST'. Did you mean 'Cast'? ThisCallback? (pre, ast: AST): boolean; ~~~ -!!! error TS2304: Cannot find name 'AST'. +!!! error TS2552: Cannot find name 'AST'. Did you mean 'Cast'? SuperCallback? (pre, ast: AST): boolean; ~~~ -!!! error TS2304: Cannot find name 'AST'. +!!! error TS2552: Cannot find name 'AST'. Did you mean 'Cast'? QStringCallback? (pre, ast: AST): boolean; ~~~ -!!! error TS2304: Cannot find name 'AST'. +!!! error TS2552: Cannot find name 'AST'. Did you mean 'Cast'? RegexCallback? (pre, ast: AST): boolean; ~~~ -!!! error TS2304: Cannot find name 'AST'. +!!! error TS2552: Cannot find name 'AST'. Did you mean 'Cast'? NullCallback? (pre, ast: AST): boolean; ~~~ -!!! error TS2304: Cannot find name 'AST'. +!!! error TS2552: Cannot find name 'AST'. Did you mean 'Cast'? ArrayLitCallback? (pre, ast: AST): boolean; ~~~ -!!! error TS2304: Cannot find name 'AST'. +!!! error TS2552: Cannot find name 'AST'. Did you mean 'Cast'? ObjectLitCallback? (pre, ast: AST): boolean; ~~~ !!! error TS2304: Cannot find name 'AST'. diff --git a/tests/baselines/reference/parserRealSource5.errors.txt b/tests/baselines/reference/parserRealSource5.errors.txt index c3f9c9f3115d1..a3579322006e7 100644 --- a/tests/baselines/reference/parserRealSource5.errors.txt +++ b/tests/baselines/reference/parserRealSource5.errors.txt @@ -1,11 +1,11 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource5.ts(4,21): error TS6053: File 'tests/cases/conformance/parser/ecmascript5/typescript.ts' not found. tests/cases/conformance/parser/ecmascript5/parserRealSource5.ts(14,66): error TS2304: Cannot find name 'Parser'. tests/cases/conformance/parser/ecmascript5/parserRealSource5.ts(27,17): error TS2304: Cannot find name 'CompilerDiagnostics'. -tests/cases/conformance/parser/ecmascript5/parserRealSource5.ts(52,38): error TS2304: Cannot find name 'AST'. -tests/cases/conformance/parser/ecmascript5/parserRealSource5.ts(52,51): error TS2304: Cannot find name 'AST'. +tests/cases/conformance/parser/ecmascript5/parserRealSource5.ts(52,38): error TS2552: Cannot find name 'AST'. Did you mean 'Cast'? +tests/cases/conformance/parser/ecmascript5/parserRealSource5.ts(52,51): error TS2552: Cannot find name 'AST'. Did you mean 'Cast'? tests/cases/conformance/parser/ecmascript5/parserRealSource5.ts(52,64): error TS2304: Cannot find name 'IAstWalker'. -tests/cases/conformance/parser/ecmascript5/parserRealSource5.ts(61,39): error TS2304: Cannot find name 'AST'. -tests/cases/conformance/parser/ecmascript5/parserRealSource5.ts(61,52): error TS2304: Cannot find name 'AST'. +tests/cases/conformance/parser/ecmascript5/parserRealSource5.ts(61,39): error TS2552: Cannot find name 'AST'. Did you mean 'Cast'? +tests/cases/conformance/parser/ecmascript5/parserRealSource5.ts(61,52): error TS2552: Cannot find name 'AST'. Did you mean 'Cast'? tests/cases/conformance/parser/ecmascript5/parserRealSource5.ts(61,65): error TS2304: Cannot find name 'IAstWalker'. @@ -69,9 +69,9 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource5.ts(61,65): error TS export function prePrintAST(ast: AST, parent: AST, walker: IAstWalker) { ~~~ -!!! error TS2304: Cannot find name 'AST'. +!!! error TS2552: Cannot find name 'AST'. Did you mean 'Cast'? ~~~ -!!! error TS2304: Cannot find name 'AST'. +!!! error TS2552: Cannot find name 'AST'. Did you mean 'Cast'? ~~~~~~~~~~ !!! error TS2304: Cannot find name 'IAstWalker'. var pc: PrintContext = walker.state; @@ -84,9 +84,9 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource5.ts(61,65): error TS export function postPrintAST(ast: AST, parent: AST, walker: IAstWalker) { ~~~ -!!! error TS2304: Cannot find name 'AST'. +!!! error TS2552: Cannot find name 'AST'. Did you mean 'Cast'? ~~~ -!!! error TS2304: Cannot find name 'AST'. +!!! error TS2552: Cannot find name 'AST'. Did you mean 'Cast'? ~~~~~~~~~~ !!! error TS2304: Cannot find name 'IAstWalker'. var pc: PrintContext = walker.state; diff --git a/tests/baselines/reference/parserRealSource6.errors.txt b/tests/baselines/reference/parserRealSource6.errors.txt index 36902234cdd80..944344447c9ee 100644 --- a/tests/baselines/reference/parserRealSource6.errors.txt +++ b/tests/baselines/reference/parserRealSource6.errors.txt @@ -3,7 +3,7 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource6.ts(8,24): error TS2 tests/cases/conformance/parser/ecmascript5/parserRealSource6.ts(10,41): error TS2304: Cannot find name 'ScopeChain'. tests/cases/conformance/parser/ecmascript5/parserRealSource6.ts(10,69): error TS2304: Cannot find name 'TypeChecker'. tests/cases/conformance/parser/ecmascript5/parserRealSource6.ts(15,22): error TS2304: Cannot find name 'Type'. -tests/cases/conformance/parser/ecmascript5/parserRealSource6.ts(16,21): error TS2304: Cannot find name 'AST'. +tests/cases/conformance/parser/ecmascript5/parserRealSource6.ts(16,21): error TS2552: Cannot find name 'AST'. Did you mean 'Cast'? tests/cases/conformance/parser/ecmascript5/parserRealSource6.ts(17,23): error TS2304: Cannot find name 'SymbolScope'. tests/cases/conformance/parser/ecmascript5/parserRealSource6.ts(18,30): error TS2304: Cannot find name 'AstWalkOptions'. tests/cases/conformance/parser/ecmascript5/parserRealSource6.ts(20,35): error TS2304: Cannot find name 'TypeFlow'. @@ -88,7 +88,7 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource6.ts(215,20): error T !!! error TS2304: Cannot find name 'Type'. public ast: AST = null; ~~~ -!!! error TS2304: Cannot find name 'AST'. +!!! error TS2552: Cannot find name 'AST'. Did you mean 'Cast'? public scope: SymbolScope; ~~~~~~~~~~~ !!! error TS2304: Cannot find name 'SymbolScope'. diff --git a/tests/baselines/reference/parserRealSource7.errors.txt b/tests/baselines/reference/parserRealSource7.errors.txt index a6dd2559d73f1..c2e5a1d378de1 100644 --- a/tests/baselines/reference/parserRealSource7.errors.txt +++ b/tests/baselines/reference/parserRealSource7.errors.txt @@ -7,7 +7,7 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(21,36): error TS tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(29,29): error TS2304: Cannot find name 'Type'. tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(29,45): error TS2552: Cannot find name 'TypeDeclaration'. Did you mean 'CSSStyleDeclaration'? tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(34,43): error TS2304: Cannot find name 'Type'. -tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(34,54): error TS2304: Cannot find name 'AST'. +tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(34,54): error TS2552: Cannot find name 'AST'. Did you mean 'Cast'? tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(34,68): error TS2304: Cannot find name 'TypeCollectionContext'. tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(35,25): error TS2304: Cannot find name 'ValueLocation'. tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(36,30): error TS2304: Cannot find name 'TypeLink'. @@ -361,7 +361,7 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(828,13): error T ~~~~ !!! error TS2304: Cannot find name 'Type'. ~~~ -!!! error TS2304: Cannot find name 'AST'. +!!! error TS2552: Cannot find name 'AST'. Did you mean 'Cast'? ~~~~~~~~~~~~~~~~~~~~~ !!! error TS2304: Cannot find name 'TypeCollectionContext'. var field = new ValueLocation(); diff --git a/tests/baselines/reference/parserRealSource8.errors.txt b/tests/baselines/reference/parserRealSource8.errors.txt index ca995c1742859..67df23b007877 100644 --- a/tests/baselines/reference/parserRealSource8.errors.txt +++ b/tests/baselines/reference/parserRealSource8.errors.txt @@ -9,7 +9,7 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource8.ts(19,14): error TS tests/cases/conformance/parser/ecmascript5/parserRealSource8.ts(21,25): error TS2304: Cannot find name 'ScopeChain'. tests/cases/conformance/parser/ecmascript5/parserRealSource8.ts(33,33): error TS2339: Property 'isInstanceProperty' does not exist on type 'Symbol'. tests/cases/conformance/parser/ecmascript5/parserRealSource8.ts(42,18): error TS2339: Property 'isInstanceProperty' does not exist on type 'Symbol'. -tests/cases/conformance/parser/ecmascript5/parserRealSource8.ts(69,48): error TS2304: Cannot find name 'AST'. +tests/cases/conformance/parser/ecmascript5/parserRealSource8.ts(69,48): error TS2552: Cannot find name 'AST'. Did you mean 'Cast'? tests/cases/conformance/parser/ecmascript5/parserRealSource8.ts(70,27): error TS2304: Cannot find name 'ModuleDeclaration'. tests/cases/conformance/parser/ecmascript5/parserRealSource8.ts(71,26): error TS2304: Cannot find name 'SymbolTableScope'. tests/cases/conformance/parser/ecmascript5/parserRealSource8.ts(72,23): error TS2304: Cannot find name 'SymbolAggregateScope'. @@ -223,7 +223,7 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource8.ts(454,35): error T export function preAssignModuleScopes(ast: AST, context: AssignScopeContext) { ~~~ -!!! error TS2304: Cannot find name 'AST'. +!!! error TS2552: Cannot find name 'AST'. Did you mean 'Cast'? var moduleDecl = ast; ~~~~~~~~~~~~~~~~~ !!! error TS2304: Cannot find name 'ModuleDeclaration'. diff --git a/tests/baselines/reference/parserharness.types b/tests/baselines/reference/parserharness.types index c8c323cb378df..1a6ef6ac5d523 100644 --- a/tests/baselines/reference/parserharness.types +++ b/tests/baselines/reference/parserharness.types @@ -3068,13 +3068,13 @@ module Harness { >(Array.isArray && Array.isArray(arg)) || arg instanceof Array : boolean >(Array.isArray && Array.isArray(arg)) : boolean >Array.isArray && Array.isArray(arg) : boolean ->Array.isArray : (arg: any) => arg is any[] +>Array.isArray : (arg: T) => arg is Cast<0 extends 1 & T ? any[] : T extends readonly unknown[] ? T : T extends string ? never : T extends ArrayLike ? U[] : unknown extends T ? unknown[] : never, T> >Array : ArrayConstructor ->isArray : (arg: any) => arg is any[] +>isArray : (arg: T) => arg is Cast<0 extends 1 & T ? any[] : T extends readonly unknown[] ? T : T extends string ? never : T extends ArrayLike ? U[] : unknown extends T ? unknown[] : never, T> >Array.isArray(arg) : boolean ->Array.isArray : (arg: any) => arg is any[] +>Array.isArray : (arg: T) => arg is Cast<0 extends 1 & T ? any[] : T extends readonly unknown[] ? T : T extends string ? never : T extends ArrayLike ? U[] : unknown extends T ? unknown[] : never, T> >Array : ArrayConstructor ->isArray : (arg: any) => arg is any[] +>isArray : (arg: T) => arg is Cast<0 extends 1 & T ? any[] : T extends readonly unknown[] ? T : T extends string ? never : T extends ArrayLike ? U[] : unknown extends T ? unknown[] : never, T> >arg : any >arg instanceof Array : boolean >arg : any diff --git a/tests/baselines/reference/partiallyDiscriminantedUnions.types b/tests/baselines/reference/partiallyDiscriminantedUnions.types index bc2ee1bf23586..c39630824c896 100644 --- a/tests/baselines/reference/partiallyDiscriminantedUnions.types +++ b/tests/baselines/reference/partiallyDiscriminantedUnions.types @@ -77,9 +77,9 @@ function isShape(s : Shapes): s is Shape { return !Array.isArray(s); >!Array.isArray(s) : boolean >Array.isArray(s) : boolean ->Array.isArray : (arg: any) => arg is any[] +>Array.isArray : (arg: T) => arg is Cast<0 extends 1 & T ? any[] : T extends readonly unknown[] ? T : T extends string ? never : T extends ArrayLike ? U[] : unknown extends T ? unknown[] : never, T> >Array : ArrayConstructor ->isArray : (arg: any) => arg is any[] +>isArray : (arg: T) => arg is Cast<0 extends 1 & T ? any[] : T extends readonly unknown[] ? T : T extends string ? never : T extends ArrayLike ? U[] : unknown extends T ? unknown[] : never, T> >s : Shapes } diff --git a/tests/baselines/reference/promisePermutations.errors.txt b/tests/baselines/reference/promisePermutations.errors.txt index 43972fe2d08b8..8447305fdd474 100644 --- a/tests/baselines/reference/promisePermutations.errors.txt +++ b/tests/baselines/reference/promisePermutations.errors.txt @@ -447,7 +447,7 @@ tests/cases/compiler/promisePermutations.ts(160,21): error TS2769: No overload m !!! error TS2769: The last overload gave the following error. !!! error TS2769: Argument of type '(x: any) => IPromise' is not assignable to parameter of type '(error: any) => Promise'. !!! error TS2769: Property 'catch' is missing in type 'IPromise' but required in type 'Promise'. -!!! related TS2728 /.ts/lib.es5.d.ts:1567:5: 'catch' is declared here. +!!! related TS2728 /.ts/lib.es5.d.ts:1579:5: 'catch' is declared here. !!! related TS2771 tests/cases/compiler/promisePermutations.ts:5:5: The last overload is declared here. var s10g = s10.then(testFunctionP, nIPromise, sIPromise).then(sPromise, sIPromise, sIPromise); // ok diff --git a/tests/baselines/reference/promisePermutations2.errors.txt b/tests/baselines/reference/promisePermutations2.errors.txt index 669db36c221b6..61867a5ed8407 100644 --- a/tests/baselines/reference/promisePermutations2.errors.txt +++ b/tests/baselines/reference/promisePermutations2.errors.txt @@ -351,7 +351,7 @@ tests/cases/compiler/promisePermutations2.ts(159,21): error TS2345: Argument of ~~~~~~~~~ !!! error TS2345: Argument of type '(x: any) => IPromise' is not assignable to parameter of type '(error: any) => Promise'. !!! error TS2345: Property 'catch' is missing in type 'IPromise' but required in type 'Promise'. -!!! related TS2728 /.ts/lib.es5.d.ts:1567:5: 'catch' is declared here. +!!! related TS2728 /.ts/lib.es5.d.ts:1579:5: 'catch' is declared here. var s10g = s10.then(testFunctionP, nIPromise, sIPromise).then(sPromise, sIPromise, sIPromise); // ok var r11: IPromise; diff --git a/tests/baselines/reference/promisePermutations3.errors.txt b/tests/baselines/reference/promisePermutations3.errors.txt index a3974e0f37c9d..a530994640722 100644 --- a/tests/baselines/reference/promisePermutations3.errors.txt +++ b/tests/baselines/reference/promisePermutations3.errors.txt @@ -398,7 +398,7 @@ tests/cases/compiler/promisePermutations3.ts(165,21): error TS2345: Argument of !!! error TS2769: The last overload gave the following error. !!! error TS2769: Argument of type '(x: any) => IPromise' is not assignable to parameter of type '(error: any) => Promise'. !!! error TS2769: Property 'catch' is missing in type 'IPromise' but required in type 'Promise'. -!!! related TS2728 /.ts/lib.es5.d.ts:1567:5: 'catch' is declared here. +!!! related TS2728 /.ts/lib.es5.d.ts:1579:5: 'catch' is declared here. !!! related TS2771 tests/cases/compiler/promisePermutations3.ts:7:5: The last overload is declared here. var s10g = s10.then(testFunctionP, nIPromise, sIPromise).then(sPromise, sIPromise, sIPromise); // ok @@ -445,5 +445,5 @@ tests/cases/compiler/promisePermutations3.ts(165,21): error TS2345: Argument of ~~~~~~~~~~~~~~~ !!! error TS2345: Argument of type '{ (x: T): IPromise; (x: T, y: T): Promise; }' is not assignable to parameter of type '(value: (x: any) => any) => Promise'. !!! error TS2345: Property 'catch' is missing in type 'IPromise' but required in type 'Promise'. -!!! related TS2728 /.ts/lib.es5.d.ts:1567:5: 'catch' is declared here. +!!! related TS2728 /.ts/lib.es5.d.ts:1579:5: 'catch' is declared here. var s12c = s12.then(testFunction12P, testFunction12, testFunction12); // ok \ No newline at end of file diff --git a/tests/baselines/reference/redefineArray.errors.txt b/tests/baselines/reference/redefineArray.errors.txt index 7bc981cee384d..41623c06596c1 100644 --- a/tests/baselines/reference/redefineArray.errors.txt +++ b/tests/baselines/reference/redefineArray.errors.txt @@ -5,4 +5,4 @@ tests/cases/compiler/redefineArray.ts(1,1): error TS2741: Property 'isArray' is Array = function (n:number, s:string) {return n;}; ~~~~~ !!! error TS2741: Property 'isArray' is missing in type '(n: number, s: string) => number' but required in type 'ArrayConstructor'. -!!! related TS2728 /.ts/lib.es5.d.ts:1518:5: 'isArray' is declared here. \ No newline at end of file +!!! related TS2728 /.ts/lib.es5.d.ts:1522:5: 'isArray' is declared here. \ No newline at end of file diff --git a/tests/baselines/reference/spreadBooleanRespectsFreshness.types b/tests/baselines/reference/spreadBooleanRespectsFreshness.types index 3ccc42b24e3ce..c8160f66399e0 100644 --- a/tests/baselines/reference/spreadBooleanRespectsFreshness.types +++ b/tests/baselines/reference/spreadBooleanRespectsFreshness.types @@ -22,9 +22,9 @@ foo1 = [...Array.isArray(foo2) ? foo2 : [foo2]]; >...Array.isArray(foo2) ? foo2 : [foo2] : FooBase >Array.isArray(foo2) ? foo2 : [foo2] : FooArray >Array.isArray(foo2) : boolean ->Array.isArray : (arg: any) => arg is any[] +>Array.isArray : (arg: T) => arg is Cast<0 extends 1 & T ? any[] : T extends readonly unknown[] ? T : T extends string ? never : T extends ArrayLike ? U[] : unknown extends T ? unknown[] : never, T> >Array : ArrayConstructor ->isArray : (arg: any) => arg is any[] +>isArray : (arg: T) => arg is Cast<0 extends 1 & T ? any[] : T extends readonly unknown[] ? T : T extends string ? never : T extends ArrayLike ? U[] : unknown extends T ? unknown[] : never, T> >foo2 : Foo >foo2 : FooArray >[foo2] : FooBase[] diff --git a/tests/baselines/reference/unknownControlFlow.types b/tests/baselines/reference/unknownControlFlow.types index bd1d851c5b3a9..2863578d38cda 100644 --- a/tests/baselines/reference/unknownControlFlow.types +++ b/tests/baselines/reference/unknownControlFlow.types @@ -660,14 +660,14 @@ function deepEquals(a: T, b: T): boolean { if (Array.isArray(a) || Array.isArray(b)) { >Array.isArray(a) || Array.isArray(b) : boolean >Array.isArray(a) : boolean ->Array.isArray : (arg: any) => arg is any[] +>Array.isArray : (arg: T) => arg is Cast<0 extends 1 & T ? any[] : T extends readonly unknown[] ? T : T extends string ? never : T extends ArrayLike ? U[] : unknown extends T ? unknown[] : never, T> >Array : ArrayConstructor ->isArray : (arg: any) => arg is any[] +>isArray : (arg: T) => arg is Cast<0 extends 1 & T ? any[] : T extends readonly unknown[] ? T : T extends string ? never : T extends ArrayLike ? U[] : unknown extends T ? unknown[] : never, T> >a : T & object >Array.isArray(b) : boolean ->Array.isArray : (arg: any) => arg is any[] +>Array.isArray : (arg: T) => arg is Cast<0 extends 1 & T ? any[] : T extends readonly unknown[] ? T : T extends string ? never : T extends ArrayLike ? U[] : unknown extends T ? unknown[] : never, T> >Array : ArrayConstructor ->isArray : (arg: any) => arg is any[] +>isArray : (arg: T) => arg is Cast<0 extends 1 & T ? any[] : T extends readonly unknown[] ? T : T extends string ? never : T extends ArrayLike ? U[] : unknown extends T ? unknown[] : never, T> >b : T & object return false; diff --git a/tests/cases/compiler/isArray.ts b/tests/cases/compiler/isArray.ts index dbdd875e21ecc..389d2f31df1f1 100644 --- a/tests/cases/compiler/isArray.ts +++ b/tests/cases/compiler/isArray.ts @@ -1,4 +1,4 @@ -var maybeArray: number | number[]; +var maybeArray: number | number[] | readonly string[]; if (Array.isArray(maybeArray)) {