diff --git a/src/lib/es5.d.ts b/src/lib/es5.d.ts index 4c3c558916ff1..422f8cdfb2bc6 100644 --- a/src/lib/es5.d.ts +++ b/src/lib/es5.d.ts @@ -1376,7 +1376,7 @@ interface ArrayConstructor { (arrayLength?: number): any[]; (arrayLength: number): T[]; (...items: T[]): T[]; - isArray(arg: T | {}): arg is T extends readonly any[] ? (unknown extends T ? never : readonly any[]) : any[]; + isArray(arg: any): arg is any[]; readonly prototype: any[]; } diff --git a/tests/baselines/reference/consistentUnionSubtypeReduction.js b/tests/baselines/reference/consistentUnionSubtypeReduction.js deleted file mode 100644 index ce583be6d33e9..0000000000000 --- a/tests/baselines/reference/consistentUnionSubtypeReduction.js +++ /dev/null @@ -1,100 +0,0 @@ -//// [consistentUnionSubtypeReduction.ts] -// https://github.com/microsoft/TypeScript/issues/31155 - -declare const MyArray: { - isArray(arg: T | {}): arg is T extends readonly any[] ? (unknown extends T ? never : readonly any[]) : any[]; -}; - -declare const a: readonly string[] | string; -declare const b: string[] | string; -declare const c: unknown; - -if (MyArray.isArray(a)) { - a; // readonly string[] -} -else { - a; // string -} -a; // readonly string[] | string; - -if (MyArray.isArray(b)) { - b; // string[] | string; -} -else { - b; // string -} -b; // string[] | string; - -if (MyArray.isArray(c)) { - c; // any[] -} - - -function f(x: T) { - const a: readonly T[] | string = null!; - const b: T[] | string = null!; - const c: T = null!; - - if (MyArray.isArray(a)) { - a; // readonly T[] - } - else { - a; // string - } - a; // readonly T[] | string; - - if (MyArray.isArray(b)) { - b; // T[] - } - else { - b; // string - } - b; - - if (MyArray.isArray(c)) { - c; // T & (T extends readonly any[] ? readonly any[] : any[]) - } -} - - -//// [consistentUnionSubtypeReduction.js] -// https://github.com/microsoft/TypeScript/issues/31155 -if (MyArray.isArray(a)) { - a; // readonly string[] -} -else { - a; // string -} -a; // readonly string[] | string; -if (MyArray.isArray(b)) { - b; // string[] | string; -} -else { - b; // string -} -b; // string[] | string; -if (MyArray.isArray(c)) { - c; // any[] -} -function f(x) { - var a = null; - var b = null; - var c = null; - if (MyArray.isArray(a)) { - a; // readonly T[] - } - else { - a; // string - } - a; // readonly T[] | string; - if (MyArray.isArray(b)) { - b; // T[] - } - else { - b; // string - } - b; - if (MyArray.isArray(c)) { - c; // T & (T extends readonly any[] ? readonly any[] : any[]) - } -} diff --git a/tests/baselines/reference/consistentUnionSubtypeReduction.symbols b/tests/baselines/reference/consistentUnionSubtypeReduction.symbols deleted file mode 100644 index 44333b25cf617..0000000000000 --- a/tests/baselines/reference/consistentUnionSubtypeReduction.symbols +++ /dev/null @@ -1,130 +0,0 @@ -=== tests/cases/compiler/consistentUnionSubtypeReduction.ts === -// https://github.com/microsoft/TypeScript/issues/31155 - -declare const MyArray: { ->MyArray : Symbol(MyArray, Decl(consistentUnionSubtypeReduction.ts, 2, 13)) - - isArray(arg: T | {}): arg is T extends readonly any[] ? (unknown extends T ? never : readonly any[]) : any[]; ->isArray : Symbol(isArray, Decl(consistentUnionSubtypeReduction.ts, 2, 24)) ->T : Symbol(T, Decl(consistentUnionSubtypeReduction.ts, 3, 12)) ->arg : Symbol(arg, Decl(consistentUnionSubtypeReduction.ts, 3, 15)) ->T : Symbol(T, Decl(consistentUnionSubtypeReduction.ts, 3, 12)) ->arg : Symbol(arg, Decl(consistentUnionSubtypeReduction.ts, 3, 15)) ->T : Symbol(T, Decl(consistentUnionSubtypeReduction.ts, 3, 12)) ->T : Symbol(T, Decl(consistentUnionSubtypeReduction.ts, 3, 12)) - -}; - -declare const a: readonly string[] | string; ->a : Symbol(a, Decl(consistentUnionSubtypeReduction.ts, 6, 13)) - -declare const b: string[] | string; ->b : Symbol(b, Decl(consistentUnionSubtypeReduction.ts, 7, 13)) - -declare const c: unknown; ->c : Symbol(c, Decl(consistentUnionSubtypeReduction.ts, 8, 13)) - -if (MyArray.isArray(a)) { ->MyArray.isArray : Symbol(isArray, Decl(consistentUnionSubtypeReduction.ts, 2, 24)) ->MyArray : Symbol(MyArray, Decl(consistentUnionSubtypeReduction.ts, 2, 13)) ->isArray : Symbol(isArray, Decl(consistentUnionSubtypeReduction.ts, 2, 24)) ->a : Symbol(a, Decl(consistentUnionSubtypeReduction.ts, 6, 13)) - - a; // readonly string[] ->a : Symbol(a, Decl(consistentUnionSubtypeReduction.ts, 6, 13)) -} -else { - a; // string ->a : Symbol(a, Decl(consistentUnionSubtypeReduction.ts, 6, 13)) -} -a; // readonly string[] | string; ->a : Symbol(a, Decl(consistentUnionSubtypeReduction.ts, 6, 13)) - -if (MyArray.isArray(b)) { ->MyArray.isArray : Symbol(isArray, Decl(consistentUnionSubtypeReduction.ts, 2, 24)) ->MyArray : Symbol(MyArray, Decl(consistentUnionSubtypeReduction.ts, 2, 13)) ->isArray : Symbol(isArray, Decl(consistentUnionSubtypeReduction.ts, 2, 24)) ->b : Symbol(b, Decl(consistentUnionSubtypeReduction.ts, 7, 13)) - - b; // string[] | string; ->b : Symbol(b, Decl(consistentUnionSubtypeReduction.ts, 7, 13)) -} -else { - b; // string ->b : Symbol(b, Decl(consistentUnionSubtypeReduction.ts, 7, 13)) -} -b; // string[] | string; ->b : Symbol(b, Decl(consistentUnionSubtypeReduction.ts, 7, 13)) - -if (MyArray.isArray(c)) { ->MyArray.isArray : Symbol(isArray, Decl(consistentUnionSubtypeReduction.ts, 2, 24)) ->MyArray : Symbol(MyArray, Decl(consistentUnionSubtypeReduction.ts, 2, 13)) ->isArray : Symbol(isArray, Decl(consistentUnionSubtypeReduction.ts, 2, 24)) ->c : Symbol(c, Decl(consistentUnionSubtypeReduction.ts, 8, 13)) - - c; // any[] ->c : Symbol(c, Decl(consistentUnionSubtypeReduction.ts, 8, 13)) -} - - -function f(x: T) { ->f : Symbol(f, Decl(consistentUnionSubtypeReduction.ts, 28, 1)) ->T : Symbol(T, Decl(consistentUnionSubtypeReduction.ts, 31, 11)) ->x : Symbol(x, Decl(consistentUnionSubtypeReduction.ts, 31, 14)) ->T : Symbol(T, Decl(consistentUnionSubtypeReduction.ts, 31, 11)) - - const a: readonly T[] | string = null!; ->a : Symbol(a, Decl(consistentUnionSubtypeReduction.ts, 32, 9)) ->T : Symbol(T, Decl(consistentUnionSubtypeReduction.ts, 31, 11)) - - const b: T[] | string = null!; ->b : Symbol(b, Decl(consistentUnionSubtypeReduction.ts, 33, 9)) ->T : Symbol(T, Decl(consistentUnionSubtypeReduction.ts, 31, 11)) - - const c: T = null!; ->c : Symbol(c, Decl(consistentUnionSubtypeReduction.ts, 34, 9)) ->T : Symbol(T, Decl(consistentUnionSubtypeReduction.ts, 31, 11)) - - if (MyArray.isArray(a)) { ->MyArray.isArray : Symbol(isArray, Decl(consistentUnionSubtypeReduction.ts, 2, 24)) ->MyArray : Symbol(MyArray, Decl(consistentUnionSubtypeReduction.ts, 2, 13)) ->isArray : Symbol(isArray, Decl(consistentUnionSubtypeReduction.ts, 2, 24)) ->a : Symbol(a, Decl(consistentUnionSubtypeReduction.ts, 32, 9)) - - a; // readonly T[] ->a : Symbol(a, Decl(consistentUnionSubtypeReduction.ts, 32, 9)) - } - else { - a; // string ->a : Symbol(a, Decl(consistentUnionSubtypeReduction.ts, 32, 9)) - } - a; // readonly T[] | string; ->a : Symbol(a, Decl(consistentUnionSubtypeReduction.ts, 32, 9)) - - if (MyArray.isArray(b)) { ->MyArray.isArray : Symbol(isArray, Decl(consistentUnionSubtypeReduction.ts, 2, 24)) ->MyArray : Symbol(MyArray, Decl(consistentUnionSubtypeReduction.ts, 2, 13)) ->isArray : Symbol(isArray, Decl(consistentUnionSubtypeReduction.ts, 2, 24)) ->b : Symbol(b, Decl(consistentUnionSubtypeReduction.ts, 33, 9)) - - b; // T[] ->b : Symbol(b, Decl(consistentUnionSubtypeReduction.ts, 33, 9)) - } - else { - b; // string ->b : Symbol(b, Decl(consistentUnionSubtypeReduction.ts, 33, 9)) - } - b; ->b : Symbol(b, Decl(consistentUnionSubtypeReduction.ts, 33, 9)) - - if (MyArray.isArray(c)) { ->MyArray.isArray : Symbol(isArray, Decl(consistentUnionSubtypeReduction.ts, 2, 24)) ->MyArray : Symbol(MyArray, Decl(consistentUnionSubtypeReduction.ts, 2, 13)) ->isArray : Symbol(isArray, Decl(consistentUnionSubtypeReduction.ts, 2, 24)) ->c : Symbol(c, Decl(consistentUnionSubtypeReduction.ts, 34, 9)) - - c; // T & (T extends readonly any[] ? readonly any[] : any[]) ->c : Symbol(c, Decl(consistentUnionSubtypeReduction.ts, 34, 9)) - } -} - diff --git a/tests/baselines/reference/consistentUnionSubtypeReduction.types b/tests/baselines/reference/consistentUnionSubtypeReduction.types deleted file mode 100644 index 059fb51b16cda..0000000000000 --- a/tests/baselines/reference/consistentUnionSubtypeReduction.types +++ /dev/null @@ -1,132 +0,0 @@ -=== tests/cases/compiler/consistentUnionSubtypeReduction.ts === -// https://github.com/microsoft/TypeScript/issues/31155 - -declare const MyArray: { ->MyArray : { isArray(arg: {} | T): arg is T extends readonly any[] ? unknown extends T ? never : readonly any[] : any[]; } - - isArray(arg: T | {}): arg is T extends readonly any[] ? (unknown extends T ? never : readonly any[]) : any[]; ->isArray : (arg: T | {}) => arg is T extends readonly any[] ? unknown extends T ? never : readonly any[] : any[] ->arg : {} | T - -}; - -declare const a: readonly string[] | string; ->a : string | readonly string[] - -declare const b: string[] | string; ->b : string | string[] - -declare const c: unknown; ->c : unknown - -if (MyArray.isArray(a)) { ->MyArray.isArray(a) : boolean ->MyArray.isArray : (arg: {} | T) => arg is T extends readonly any[] ? unknown extends T ? never : readonly any[] : any[] ->MyArray : { isArray(arg: {} | T): arg is T extends readonly any[] ? unknown extends T ? never : readonly any[] : any[]; } ->isArray : (arg: {} | T) => arg is T extends readonly any[] ? unknown extends T ? never : readonly any[] : any[] ->a : string | readonly string[] - - a; // readonly string[] ->a : readonly string[] -} -else { - a; // string ->a : string -} -a; // readonly string[] | string; ->a : string | readonly string[] - -if (MyArray.isArray(b)) { ->MyArray.isArray(b) : boolean ->MyArray.isArray : (arg: {} | T) => arg is T extends readonly any[] ? unknown extends T ? never : readonly any[] : any[] ->MyArray : { isArray(arg: {} | T): arg is T extends readonly any[] ? unknown extends T ? never : readonly any[] : any[]; } ->isArray : (arg: {} | T) => arg is T extends readonly any[] ? unknown extends T ? never : readonly any[] : any[] ->b : string | string[] - - b; // string[] | string; ->b : string[] -} -else { - b; // string ->b : string -} -b; // string[] | string; ->b : string | string[] - -if (MyArray.isArray(c)) { ->MyArray.isArray(c) : boolean ->MyArray.isArray : (arg: {} | T) => arg is T extends readonly any[] ? unknown extends T ? never : readonly any[] : any[] ->MyArray : { isArray(arg: {} | T): arg is T extends readonly any[] ? unknown extends T ? never : readonly any[] : any[]; } ->isArray : (arg: {} | T) => arg is T extends readonly any[] ? unknown extends T ? never : readonly any[] : any[] ->c : unknown - - c; // any[] ->c : any[] -} - - -function f(x: T) { ->f : (x: T) => void ->x : T - - const a: readonly T[] | string = null!; ->a : string | readonly T[] ->null! : null ->null : null - - const b: T[] | string = null!; ->b : string | T[] ->null! : null ->null : null - - const c: T = null!; ->c : T ->null! : null ->null : null - - if (MyArray.isArray(a)) { ->MyArray.isArray(a) : boolean ->MyArray.isArray : (arg: {} | T) => arg is T extends readonly any[] ? unknown extends T ? never : readonly any[] : any[] ->MyArray : { isArray(arg: {} | T): arg is T extends readonly any[] ? unknown extends T ? never : readonly any[] : any[]; } ->isArray : (arg: {} | T) => arg is T extends readonly any[] ? unknown extends T ? never : readonly any[] : any[] ->a : string | readonly T[] - - a; // readonly T[] ->a : readonly T[] - } - else { - a; // string ->a : string - } - a; // readonly T[] | string; ->a : string | readonly T[] - - if (MyArray.isArray(b)) { ->MyArray.isArray(b) : boolean ->MyArray.isArray : (arg: {} | T) => arg is T extends readonly any[] ? unknown extends T ? never : readonly any[] : any[] ->MyArray : { isArray(arg: {} | T): arg is T extends readonly any[] ? unknown extends T ? never : readonly any[] : any[]; } ->isArray : (arg: {} | T) => arg is T extends readonly any[] ? unknown extends T ? never : readonly any[] : any[] ->b : string | T[] - - b; // T[] ->b : T[] - } - else { - b; // string ->b : string - } - b; ->b : string | T[] - - if (MyArray.isArray(c)) { ->MyArray.isArray(c) : boolean ->MyArray.isArray : (arg: {} | T) => arg is T extends readonly any[] ? unknown extends T ? never : readonly any[] : any[] ->MyArray : { isArray(arg: {} | T): arg is T extends readonly any[] ? unknown extends T ? never : readonly any[] : any[]; } ->isArray : (arg: {} | T) => arg is T extends readonly any[] ? unknown extends T ? never : readonly any[] : any[] ->c : T - - c; // T & (T extends readonly any[] ? readonly any[] : any[]) ->c : T & (T extends readonly any[] ? unknown extends T ? never : readonly any[] : any[]) - } -} - diff --git a/tests/baselines/reference/declarationsWithRecursiveInternalTypesProduceUniqueTypeParams.types b/tests/baselines/reference/declarationsWithRecursiveInternalTypesProduceUniqueTypeParams.types index 2501ef2882d18..7aff4276be765 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, source: U): T & U; (target: T, source1: U, source2: V): T & U & V; (target: T, source1: U, source2: V, source3: W): T & U & V & W; (target: object, ...sources: any[]): any; } >Array.isArray(u) ? [] : {} : undefined[] | {} >Array.isArray(u) : boolean ->Array.isArray : (arg: {} | T) => arg is T extends readonly any[] ? unknown extends T ? never : readonly any[] : any[] +>Array.isArray : (arg: any) => arg is any[] >Array : ArrayConstructor ->isArray : (arg: {} | T) => arg is T extends readonly any[] ? unknown extends T ? never : readonly any[] : any[] +>isArray : (arg: any) => arg is any[] >u : U >[] : undefined[] >{} : {} diff --git a/tests/baselines/reference/fixSignatureCaching.types b/tests/baselines/reference/fixSignatureCaching.types index 8765e8fc310f4..cf367966c0260 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: {} | T) => arg is T extends readonly any[] ? unknown extends T ? never : readonly any[] : any[] +>Array.isArray : (arg: any) => arg is any[] >Array : ArrayConstructor ->isArray : (arg: {} | T) => arg is T extends readonly any[] ? unknown extends T ? never : readonly any[] : any[] +>isArray : (arg: any) => arg is any[] >function (value) { return Object.prototype.toString.call(value) === '[object Array]'; } : (value: any) => boolean >value : any >Object.prototype.toString.call(value) === '[object Array]' : boolean diff --git a/tests/baselines/reference/isArray.types b/tests/baselines/reference/isArray.types index 2e70eca8fb188..bc452b12bef01 100644 --- a/tests/baselines/reference/isArray.types +++ b/tests/baselines/reference/isArray.types @@ -5,9 +5,9 @@ var maybeArray: number | number[]; if (Array.isArray(maybeArray)) { >Array.isArray(maybeArray) : boolean ->Array.isArray : (arg: {} | T) => arg is T extends readonly any[] ? unknown extends T ? never : readonly any[] : any[] +>Array.isArray : (arg: any) => arg is any[] >Array : ArrayConstructor ->isArray : (arg: {} | T) => arg is T extends readonly any[] ? unknown extends T ? never : readonly any[] : any[] +>isArray : (arg: any) => arg is any[] >maybeArray : number | number[] maybeArray.length; // OK diff --git a/tests/baselines/reference/literalFreshnessPropagationOnNarrowing.types b/tests/baselines/reference/literalFreshnessPropagationOnNarrowing.types index 51ee436e6dd34..8fb03bc413f30 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: {} | T) => arg is T extends readonly any[] ? unknown extends T ? never : readonly any[] : any[] +>Array.isArray : (arg: any) => arg is any[] >Array : ArrayConstructor ->isArray : (arg: {} | T) => arg is T extends readonly any[] ? unknown extends T ? never : readonly any[] : any[] +>isArray : (arg: any) => arg is any[] >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: {} | T) => arg is T extends readonly any[] ? unknown extends T ? never : readonly any[] : any[] +>Array.isArray : (arg: any) => arg is any[] >Array : ArrayConstructor ->isArray : (arg: {} | T) => arg is T extends readonly any[] ? unknown extends T ? never : readonly any[] : any[] +>isArray : (arg: any) => arg is any[] >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 c5d63bfd3cb5a..c3af959586790 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: {} | T) => arg is T extends readonly any[] ? unknown extends T ? never : readonly any[] : any[] +>Array.isArray : (arg: any) => arg is any[] >Array : ArrayConstructor ->isArray : (arg: {} | T) => arg is T extends readonly any[] ? unknown extends T ? never : readonly any[] : any[] +>isArray : (arg: any) => arg is any[] diff --git a/tests/baselines/reference/noIterationTypeErrorsInCFA.types b/tests/baselines/reference/noIterationTypeErrorsInCFA.types index a008015c7d756..9d0122627ffae 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: {} | T) => arg is T extends readonly any[] ? unknown extends T ? never : readonly any[] : any[] +>Array.isArray : (arg: any) => arg is any[] >Array : ArrayConstructor ->isArray : (arg: {} | T) => arg is T extends readonly any[] ? unknown extends T ? never : readonly any[] : any[] +>isArray : (arg: any) => arg is any[] >dds : F | F[] dds = [dds] diff --git a/tests/baselines/reference/parserharness.types b/tests/baselines/reference/parserharness.types index f4af8d0d64b8d..4c047e08d9115 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: {} | T) => arg is T extends readonly any[] ? unknown extends T ? never : readonly any[] : any[] +>Array.isArray : (arg: any) => arg is any[] >Array : ArrayConstructor ->isArray : (arg: {} | T) => arg is T extends readonly any[] ? unknown extends T ? never : readonly any[] : any[] +>isArray : (arg: any) => arg is any[] >Array.isArray(arg) : boolean ->Array.isArray : (arg: {} | T) => arg is T extends readonly any[] ? unknown extends T ? never : readonly any[] : any[] +>Array.isArray : (arg: any) => arg is any[] >Array : ArrayConstructor ->isArray : (arg: {} | T) => arg is T extends readonly any[] ? unknown extends T ? never : readonly any[] : any[] +>isArray : (arg: any) => arg is any[] >arg : any >arg instanceof Array : boolean >arg : any diff --git a/tests/baselines/reference/partiallyDiscriminantedUnions.types b/tests/baselines/reference/partiallyDiscriminantedUnions.types index c9afb116ca3e6..f1d44249c0eb2 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: {} | T) => arg is T extends readonly any[] ? unknown extends T ? never : readonly any[] : any[] +>Array.isArray : (arg: any) => arg is any[] >Array : ArrayConstructor ->isArray : (arg: {} | T) => arg is T extends readonly any[] ? unknown extends T ? never : readonly any[] : any[] +>isArray : (arg: any) => arg is any[] >s : Shapes } diff --git a/tests/baselines/reference/spreadBooleanRespectsFreshness.types b/tests/baselines/reference/spreadBooleanRespectsFreshness.types index 195582d79391a..cd20dc31944b6 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: {} | T) => arg is T extends readonly any[] ? unknown extends T ? never : readonly any[] : any[] +>Array.isArray : (arg: any) => arg is any[] >Array : ArrayConstructor ->isArray : (arg: {} | T) => arg is T extends readonly any[] ? unknown extends T ? never : readonly any[] : any[] +>isArray : (arg: any) => arg is any[] >foo2 : Foo >foo2 : FooArray >[foo2] : FooBase[] diff --git a/tests/cases/compiler/consistentUnionSubtypeReduction.ts b/tests/cases/compiler/consistentUnionSubtypeReduction.ts deleted file mode 100644 index 94fd44239a1c0..0000000000000 --- a/tests/cases/compiler/consistentUnionSubtypeReduction.ts +++ /dev/null @@ -1,56 +0,0 @@ -// https://github.com/microsoft/TypeScript/issues/31155 - -declare const MyArray: { - isArray(arg: T | {}): arg is T extends readonly any[] ? (unknown extends T ? never : readonly any[]) : any[]; -}; - -declare const a: readonly string[] | string; -declare const b: string[] | string; -declare const c: unknown; - -if (MyArray.isArray(a)) { - a; // readonly string[] -} -else { - a; // string -} -a; // readonly string[] | string; - -if (MyArray.isArray(b)) { - b; // string[] | string; -} -else { - b; // string -} -b; // string[] | string; - -if (MyArray.isArray(c)) { - c; // any[] -} - - -function f(x: T) { - const a: readonly T[] | string = null!; - const b: T[] | string = null!; - const c: T = null!; - - if (MyArray.isArray(a)) { - a; // readonly T[] - } - else { - a; // string - } - a; // readonly T[] | string; - - if (MyArray.isArray(b)) { - b; // T[] - } - else { - b; // string - } - b; - - if (MyArray.isArray(c)) { - c; // T & (T extends readonly any[] ? readonly any[] : any[]) - } -}