From 7464af0f099eba2aaa6e3073e76f25874ad7b919 Mon Sep 17 00:00:00 2001 From: Gabriela Araujo Britto Date: Wed, 5 Mar 2025 11:50:53 -0800 Subject: [PATCH] update tests --- .../reference/dependentReturnType1.errors.txt | 8 +- .../dependentReturnType13.errors.txt | 30 ++-- .../reference/dependentReturnType13.symbols | 168 +++++++++--------- .../reference/dependentReturnType13.types | 28 ++- tests/cases/compiler/dependentReturnType13.ts | 7 +- 5 files changed, 131 insertions(+), 110 deletions(-) diff --git a/tests/baselines/reference/dependentReturnType1.errors.txt b/tests/baselines/reference/dependentReturnType1.errors.txt index 01843e25149..4332400eaf6 100644 --- a/tests/baselines/reference/dependentReturnType1.errors.txt +++ b/tests/baselines/reference/dependentReturnType1.errors.txt @@ -28,8 +28,6 @@ dependentReturnType1.ts(275,9): error TS2322: Type '1' is not assignable to type dependentReturnType1.ts(278,9): error TS2322: Type '2' is not assignable to type 'HelperCond<{ x: U; y: V; }, { x: string; y: true; }, 1, { x: number; y: false; }, 2>'. dependentReturnType1.ts(280,5): error TS2322: Type '0' is not assignable to type 'HelperCond<{ x: U; y: V; }, { x: string; y: true; }, 1, { x: number; y: false; }, 2>'. dependentReturnType1.ts(302,9): error TS2322: Type 'string' is not assignable to type 'string[]'. -dependentReturnType1.ts(311,9): error TS2322: Type 'undefined' is not assignable to type 'T extends {} ? void : T extends undefined ? number : never'. -dependentReturnType1.ts(313,5): error TS2322: Type 'number' is not assignable to type 'T extends {} ? void : T extends undefined ? number : never'. dependentReturnType1.ts(334,9): error TS2322: Type '1' is not assignable to type '4'. dependentReturnType1.ts(367,13): error TS2322: Type 'number' is not assignable to type 'T extends 1 ? number : T extends 2 ? string : never'. dependentReturnType1.ts(369,9): error TS2322: Type 'string' is not assignable to type 'T extends 1 ? number : T extends 2 ? string : never'. @@ -46,7 +44,7 @@ dependentReturnType1.ts(488,9): error TS2322: Type 'R' is not assignable to type dependentReturnType1.ts(514,5): error TS2322: Type '1' is not assignable to type 'never'. -==== dependentReturnType1.ts (41 errors) ==== +==== dependentReturnType1.ts (39 errors) ==== interface A { 1: number; 2: string; @@ -413,12 +411,8 @@ dependentReturnType1.ts(514,5): error TS2322: Type '1' is not assignable to type ): T extends {} ? void : T extends undefined ? number : never { if (x) { return; - ~~~~~~ -!!! error TS2322: Type 'undefined' is not assignable to type 'T extends {} ? void : T extends undefined ? number : never'. } return 1; - ~~~~~~ -!!! error TS2322: Type 'number' is not assignable to type 'T extends {} ? void : T extends undefined ? number : never'. } // Multiple type parameters at once diff --git a/tests/baselines/reference/dependentReturnType13.errors.txt b/tests/baselines/reference/dependentReturnType13.errors.txt index 3636362679b..a37ae3d553d 100644 --- a/tests/baselines/reference/dependentReturnType13.errors.txt +++ b/tests/baselines/reference/dependentReturnType13.errors.txt @@ -1,15 +1,16 @@ -dependentReturnType13.ts(29,9): error TS2322: Type '2' is not assignable to type 'T extends string ? 1 : T extends string[] ? 2 : T extends number[] ? 3 : never'. -dependentReturnType13.ts(31,5): error TS2322: Type '1' is not assignable to type 'T extends string ? 1 : T extends string[] ? 2 : T extends number[] ? 3 : never'. -dependentReturnType13.ts(49,9): error TS2322: Type '2' is not assignable to type 'T extends Cat ? 1 : T extends Dog ? 2 : never'. -dependentReturnType13.ts(52,5): error TS2322: Type '1' is not assignable to type 'T extends Cat ? 1 : T extends Dog ? 2 : never'. -dependentReturnType13.ts(79,9): error TS2322: Type '2' is not assignable to type 'T extends number[] ? 2 : U extends true ? T extends string[] ? 3 : T extends string ? 1 : never : U extends false ? T extends string[] ? 4 : T extends string ? 5 : never : never'. -dependentReturnType13.ts(83,13): error TS2322: Type '3' is not assignable to type 'T extends number[] ? 2 : U extends true ? T extends string[] ? 3 : T extends string ? 1 : never : U extends false ? T extends string[] ? 4 : T extends string ? 5 : never : never'. -dependentReturnType13.ts(85,9): error TS2322: Type '1' is not assignable to type 'T extends number[] ? 2 : U extends true ? T extends string[] ? 3 : T extends string ? 1 : never : U extends false ? T extends string[] ? 4 : T extends string ? 5 : never : never'. -dependentReturnType13.ts(88,9): error TS2322: Type '4' is not assignable to type 'T extends number[] ? 2 : U extends true ? T extends string[] ? 3 : T extends string ? 1 : never : U extends false ? T extends string[] ? 4 : T extends string ? 5 : never : never'. -dependentReturnType13.ts(90,5): error TS2322: Type '5' is not assignable to type 'T extends number[] ? 2 : U extends true ? T extends string[] ? 3 : T extends string ? 1 : never : U extends false ? T extends string[] ? 4 : T extends string ? 5 : never : never'. +dependentReturnType13.ts(31,9): error TS2322: Type '3' is not assignable to type 'T extends string ? 1 : T extends string[] ? 2 : T extends number[] ? 3 : never'. +dependentReturnType13.ts(34,9): error TS2322: Type '2' is not assignable to type 'T extends string ? 1 : T extends string[] ? 2 : T extends number[] ? 3 : never'. +dependentReturnType13.ts(36,5): error TS2322: Type '1' is not assignable to type 'T extends string ? 1 : T extends string[] ? 2 : T extends number[] ? 3 : never'. +dependentReturnType13.ts(54,9): error TS2322: Type '2' is not assignable to type 'T extends Cat ? 1 : T extends Dog ? 2 : never'. +dependentReturnType13.ts(57,5): error TS2322: Type '1' is not assignable to type 'T extends Cat ? 1 : T extends Dog ? 2 : never'. +dependentReturnType13.ts(84,9): error TS2322: Type '2' is not assignable to type 'T extends number[] ? 2 : U extends true ? T extends string[] ? 3 : T extends string ? 1 : never : U extends false ? T extends string[] ? 4 : T extends string ? 5 : never : never'. +dependentReturnType13.ts(88,13): error TS2322: Type '3' is not assignable to type 'T extends number[] ? 2 : U extends true ? T extends string[] ? 3 : T extends string ? 1 : never : U extends false ? T extends string[] ? 4 : T extends string ? 5 : never : never'. +dependentReturnType13.ts(90,9): error TS2322: Type '1' is not assignable to type 'T extends number[] ? 2 : U extends true ? T extends string[] ? 3 : T extends string ? 1 : never : U extends false ? T extends string[] ? 4 : T extends string ? 5 : never : never'. +dependentReturnType13.ts(93,9): error TS2322: Type '4' is not assignable to type 'T extends number[] ? 2 : U extends true ? T extends string[] ? 3 : T extends string ? 1 : never : U extends false ? T extends string[] ? 4 : T extends string ? 5 : never : never'. +dependentReturnType13.ts(95,5): error TS2322: Type '5' is not assignable to type 'T extends number[] ? 2 : U extends true ? T extends string[] ? 3 : T extends string ? 1 : never : U extends false ? T extends string[] ? 4 : T extends string ? 5 : never : never'. -==== dependentReturnType13.ts (9 errors) ==== +==== dependentReturnType13.ts (10 errors) ==== // Restrictions on what kind of union types can be narrowed. function f1(param: T): @@ -32,11 +33,18 @@ dependentReturnType13.ts(90,5): error TS2322: Type '5' is not assignable to type return 1; } + declare function isNumberArray(x: unknown): x is number[]; + function f3(param: T): // Bad. T extends string ? 1 : T extends string[] ? 2 : T extends number[] ? 3 : never { + if (isNumberArray(param)) { + return 3; + ~~~~~~ +!!! error TS2322: Type '3' is not assignable to type 'T extends string ? 1 : T extends string[] ? 2 : T extends number[] ? 3 : never'. + } if (Array.isArray(param)) { return 2; ~~~~~~ @@ -120,8 +128,6 @@ dependentReturnType13.ts(90,5): error TS2322: Type '5' is not assignable to type !!! error TS2322: Type '5' is not assignable to type 'T extends number[] ? 2 : U extends true ? T extends string[] ? 3 : T extends string ? 1 : never : U extends false ? T extends string[] ? 4 : T extends string ? 5 : never : never'. } - declare function isNumberArray(x: unknown): x is number[]; - function f7(param: T, other: U): U extends number ? T extends string[] ? 2 : diff --git a/tests/baselines/reference/dependentReturnType13.symbols b/tests/baselines/reference/dependentReturnType13.symbols index 6c488868ba3..e1093e39fa5 100644 --- a/tests/baselines/reference/dependentReturnType13.symbols +++ b/tests/baselines/reference/dependentReturnType13.symbols @@ -51,27 +51,38 @@ function f2(param: T): return 1; } +declare function isNumberArray(x: unknown): x is number[]; +>isNumberArray : Symbol(isNumberArray, Decl(dependentReturnType13.ts, 20, 1)) +>x : Symbol(x, Decl(dependentReturnType13.ts, 22, 31)) +>x : Symbol(x, Decl(dependentReturnType13.ts, 22, 31)) + function f3(param: T): // Bad. ->f3 : Symbol(f3, Decl(dependentReturnType13.ts, 20, 1)) ->T : Symbol(T, Decl(dependentReturnType13.ts, 22, 12)) ->param : Symbol(param, Decl(dependentReturnType13.ts, 22, 52)) ->T : Symbol(T, Decl(dependentReturnType13.ts, 22, 12)) +>f3 : Symbol(f3, Decl(dependentReturnType13.ts, 22, 58)) +>T : Symbol(T, Decl(dependentReturnType13.ts, 24, 12)) +>param : Symbol(param, Decl(dependentReturnType13.ts, 24, 52)) +>T : Symbol(T, Decl(dependentReturnType13.ts, 24, 12)) T extends string ? 1 : ->T : Symbol(T, Decl(dependentReturnType13.ts, 22, 12)) +>T : Symbol(T, Decl(dependentReturnType13.ts, 24, 12)) T extends string[] ? 2 : ->T : Symbol(T, Decl(dependentReturnType13.ts, 22, 12)) +>T : Symbol(T, Decl(dependentReturnType13.ts, 24, 12)) T extends number[] ? 3 : ->T : Symbol(T, Decl(dependentReturnType13.ts, 22, 12)) +>T : Symbol(T, Decl(dependentReturnType13.ts, 24, 12)) never { + if (isNumberArray(param)) { +>isNumberArray : Symbol(isNumberArray, Decl(dependentReturnType13.ts, 20, 1)) +>param : Symbol(param, Decl(dependentReturnType13.ts, 24, 52)) + + return 3; + } if (Array.isArray(param)) { >Array.isArray : Symbol(ArrayConstructor.isArray, Decl(lib.es5.d.ts, --, --)) >Array : Symbol(Array, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --)) >isArray : Symbol(ArrayConstructor.isArray, Decl(lib.es5.d.ts, --, --)) ->param : Symbol(param, Decl(dependentReturnType13.ts, 22, 52)) +>param : Symbol(param, Decl(dependentReturnType13.ts, 24, 52)) return 2; } @@ -79,135 +90,135 @@ function f3(param: T): // Bad. } class Dog { ->Dog : Symbol(Dog, Decl(dependentReturnType13.ts, 31, 1)) +>Dog : Symbol(Dog, Decl(dependentReturnType13.ts, 36, 1)) bark(): void {} ->bark : Symbol(Dog.bark, Decl(dependentReturnType13.ts, 33, 11)) +>bark : Symbol(Dog.bark, Decl(dependentReturnType13.ts, 38, 11)) } class Cat { ->Cat : Symbol(Cat, Decl(dependentReturnType13.ts, 35, 1)) +>Cat : Symbol(Cat, Decl(dependentReturnType13.ts, 40, 1)) meow(): void {} ->meow : Symbol(Cat.meow, Decl(dependentReturnType13.ts, 37, 11)) +>meow : Symbol(Cat.meow, Decl(dependentReturnType13.ts, 42, 11)) } function f4(param: T): // Bad. ->f4 : Symbol(f4, Decl(dependentReturnType13.ts, 40, 1)) ->T : Symbol(T, Decl(dependentReturnType13.ts, 42, 12)) ->Cat : Symbol(Cat, Decl(dependentReturnType13.ts, 35, 1)) ->Dog : Symbol(Dog, Decl(dependentReturnType13.ts, 31, 1)) ->param : Symbol(param, Decl(dependentReturnType13.ts, 42, 33)) ->T : Symbol(T, Decl(dependentReturnType13.ts, 42, 12)) +>f4 : Symbol(f4, Decl(dependentReturnType13.ts, 45, 1)) +>T : Symbol(T, Decl(dependentReturnType13.ts, 47, 12)) +>Cat : Symbol(Cat, Decl(dependentReturnType13.ts, 40, 1)) +>Dog : Symbol(Dog, Decl(dependentReturnType13.ts, 36, 1)) +>param : Symbol(param, Decl(dependentReturnType13.ts, 47, 33)) +>T : Symbol(T, Decl(dependentReturnType13.ts, 47, 12)) T extends Cat ? 1 : ->T : Symbol(T, Decl(dependentReturnType13.ts, 42, 12)) ->Cat : Symbol(Cat, Decl(dependentReturnType13.ts, 35, 1)) +>T : Symbol(T, Decl(dependentReturnType13.ts, 47, 12)) +>Cat : Symbol(Cat, Decl(dependentReturnType13.ts, 40, 1)) T extends Dog ? 2 : ->T : Symbol(T, Decl(dependentReturnType13.ts, 42, 12)) ->Dog : Symbol(Dog, Decl(dependentReturnType13.ts, 31, 1)) +>T : Symbol(T, Decl(dependentReturnType13.ts, 47, 12)) +>Dog : Symbol(Dog, Decl(dependentReturnType13.ts, 36, 1)) never { if ('bark' in param) { ->param : Symbol(param, Decl(dependentReturnType13.ts, 42, 33)) +>param : Symbol(param, Decl(dependentReturnType13.ts, 47, 33)) const _: Dog = param; ->_ : Symbol(_, Decl(dependentReturnType13.ts, 47, 13)) ->Dog : Symbol(Dog, Decl(dependentReturnType13.ts, 31, 1)) ->param : Symbol(param, Decl(dependentReturnType13.ts, 42, 33)) +>_ : Symbol(_, Decl(dependentReturnType13.ts, 52, 13)) +>Dog : Symbol(Dog, Decl(dependentReturnType13.ts, 36, 1)) +>param : Symbol(param, Decl(dependentReturnType13.ts, 47, 33)) return 2; } const _: Cat = param; ->_ : Symbol(_, Decl(dependentReturnType13.ts, 50, 9)) ->Cat : Symbol(Cat, Decl(dependentReturnType13.ts, 35, 1)) ->param : Symbol(param, Decl(dependentReturnType13.ts, 42, 33)) +>_ : Symbol(_, Decl(dependentReturnType13.ts, 55, 9)) +>Cat : Symbol(Cat, Decl(dependentReturnType13.ts, 40, 1)) +>param : Symbol(param, Decl(dependentReturnType13.ts, 47, 33)) return 1; } function f5(param: T): ->f5 : Symbol(f5, Decl(dependentReturnType13.ts, 52, 1)) ->T : Symbol(T, Decl(dependentReturnType13.ts, 54, 12)) ->param : Symbol(param, Decl(dependentReturnType13.ts, 54, 50)) ->T : Symbol(T, Decl(dependentReturnType13.ts, 54, 12)) +>f5 : Symbol(f5, Decl(dependentReturnType13.ts, 57, 1)) +>T : Symbol(T, Decl(dependentReturnType13.ts, 59, 12)) +>param : Symbol(param, Decl(dependentReturnType13.ts, 59, 50)) +>T : Symbol(T, Decl(dependentReturnType13.ts, 59, 12)) T extends string ? 1 : ->T : Symbol(T, Decl(dependentReturnType13.ts, 54, 12)) +>T : Symbol(T, Decl(dependentReturnType13.ts, 59, 12)) T extends number | string[] ? 2 : ->T : Symbol(T, Decl(dependentReturnType13.ts, 54, 12)) +>T : Symbol(T, Decl(dependentReturnType13.ts, 59, 12)) never { if (Array.isArray(param) || typeof param === "number") { >Array.isArray : Symbol(ArrayConstructor.isArray, Decl(lib.es5.d.ts, --, --)) >Array : Symbol(Array, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --)) >isArray : Symbol(ArrayConstructor.isArray, Decl(lib.es5.d.ts, --, --)) ->param : Symbol(param, Decl(dependentReturnType13.ts, 54, 50)) ->param : Symbol(param, Decl(dependentReturnType13.ts, 54, 50)) +>param : Symbol(param, Decl(dependentReturnType13.ts, 59, 50)) +>param : Symbol(param, Decl(dependentReturnType13.ts, 59, 50)) const _: string[] | number = param; ->_ : Symbol(_, Decl(dependentReturnType13.ts, 59, 13)) ->param : Symbol(param, Decl(dependentReturnType13.ts, 54, 50)) +>_ : Symbol(_, Decl(dependentReturnType13.ts, 64, 13)) +>param : Symbol(param, Decl(dependentReturnType13.ts, 59, 50)) return 2; } const _: string = param; ->_ : Symbol(_, Decl(dependentReturnType13.ts, 62, 9)) ->param : Symbol(param, Decl(dependentReturnType13.ts, 54, 50)) +>_ : Symbol(_, Decl(dependentReturnType13.ts, 67, 9)) +>param : Symbol(param, Decl(dependentReturnType13.ts, 59, 50)) return 1; } function f6(param: T, other: U): ->f6 : Symbol(f6, Decl(dependentReturnType13.ts, 64, 1)) ->T : Symbol(T, Decl(dependentReturnType13.ts, 66, 12)) ->U : Symbol(U, Decl(dependentReturnType13.ts, 66, 51)) ->param : Symbol(param, Decl(dependentReturnType13.ts, 66, 71)) ->T : Symbol(T, Decl(dependentReturnType13.ts, 66, 12)) ->other : Symbol(other, Decl(dependentReturnType13.ts, 66, 80)) ->U : Symbol(U, Decl(dependentReturnType13.ts, 66, 51)) +>f6 : Symbol(f6, Decl(dependentReturnType13.ts, 69, 1)) +>T : Symbol(T, Decl(dependentReturnType13.ts, 71, 12)) +>U : Symbol(U, Decl(dependentReturnType13.ts, 71, 51)) +>param : Symbol(param, Decl(dependentReturnType13.ts, 71, 71)) +>T : Symbol(T, Decl(dependentReturnType13.ts, 71, 12)) +>other : Symbol(other, Decl(dependentReturnType13.ts, 71, 80)) +>U : Symbol(U, Decl(dependentReturnType13.ts, 71, 51)) T extends number[] ? 2 : ->T : Symbol(T, Decl(dependentReturnType13.ts, 66, 12)) +>T : Symbol(T, Decl(dependentReturnType13.ts, 71, 12)) U extends true ? ->U : Symbol(U, Decl(dependentReturnType13.ts, 66, 51)) +>U : Symbol(U, Decl(dependentReturnType13.ts, 71, 51)) T extends string[] ? 3 : ->T : Symbol(T, Decl(dependentReturnType13.ts, 66, 12)) +>T : Symbol(T, Decl(dependentReturnType13.ts, 71, 12)) T extends string ? 1 : ->T : Symbol(T, Decl(dependentReturnType13.ts, 66, 12)) +>T : Symbol(T, Decl(dependentReturnType13.ts, 71, 12)) never : U extends false ? ->U : Symbol(U, Decl(dependentReturnType13.ts, 66, 51)) +>U : Symbol(U, Decl(dependentReturnType13.ts, 71, 51)) T extends string[] ? 4 : ->T : Symbol(T, Decl(dependentReturnType13.ts, 66, 12)) +>T : Symbol(T, Decl(dependentReturnType13.ts, 71, 12)) T extends string ? 5 : ->T : Symbol(T, Decl(dependentReturnType13.ts, 66, 12)) +>T : Symbol(T, Decl(dependentReturnType13.ts, 71, 12)) never : never { if (isNumberArray(param)) { ->isNumberArray : Symbol(isNumberArray, Decl(dependentReturnType13.ts, 90, 1)) ->param : Symbol(param, Decl(dependentReturnType13.ts, 66, 71)) +>isNumberArray : Symbol(isNumberArray, Decl(dependentReturnType13.ts, 20, 1)) +>param : Symbol(param, Decl(dependentReturnType13.ts, 71, 71)) return 2; } if (other) { ->other : Symbol(other, Decl(dependentReturnType13.ts, 66, 80)) +>other : Symbol(other, Decl(dependentReturnType13.ts, 71, 80)) if (Array.isArray(param)) { >Array.isArray : Symbol(ArrayConstructor.isArray, Decl(lib.es5.d.ts, --, --)) >Array : Symbol(Array, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --)) >isArray : Symbol(ArrayConstructor.isArray, Decl(lib.es5.d.ts, --, --)) ->param : Symbol(param, Decl(dependentReturnType13.ts, 66, 71)) +>param : Symbol(param, Decl(dependentReturnType13.ts, 71, 71)) return 3; } @@ -217,45 +228,40 @@ function f6(param: T, >Array.isArray : Symbol(ArrayConstructor.isArray, Decl(lib.es5.d.ts, --, --)) >Array : Symbol(Array, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --)) >isArray : Symbol(ArrayConstructor.isArray, Decl(lib.es5.d.ts, --, --)) ->param : Symbol(param, Decl(dependentReturnType13.ts, 66, 71)) +>param : Symbol(param, Decl(dependentReturnType13.ts, 71, 71)) return 4; } return 5; } -declare function isNumberArray(x: unknown): x is number[]; ->isNumberArray : Symbol(isNumberArray, Decl(dependentReturnType13.ts, 90, 1)) ->x : Symbol(x, Decl(dependentReturnType13.ts, 92, 31)) ->x : Symbol(x, Decl(dependentReturnType13.ts, 92, 31)) - function f7(param: T, other: U): ->f7 : Symbol(f7, Decl(dependentReturnType13.ts, 92, 58)) ->T : Symbol(T, Decl(dependentReturnType13.ts, 94, 12)) ->U : Symbol(U, Decl(dependentReturnType13.ts, 94, 40)) ->param : Symbol(param, Decl(dependentReturnType13.ts, 94, 70)) ->T : Symbol(T, Decl(dependentReturnType13.ts, 94, 12)) ->other : Symbol(other, Decl(dependentReturnType13.ts, 94, 79)) ->U : Symbol(U, Decl(dependentReturnType13.ts, 94, 40)) +>f7 : Symbol(f7, Decl(dependentReturnType13.ts, 95, 1)) +>T : Symbol(T, Decl(dependentReturnType13.ts, 97, 12)) +>U : Symbol(U, Decl(dependentReturnType13.ts, 97, 40)) +>param : Symbol(param, Decl(dependentReturnType13.ts, 97, 70)) +>T : Symbol(T, Decl(dependentReturnType13.ts, 97, 12)) +>other : Symbol(other, Decl(dependentReturnType13.ts, 97, 79)) +>U : Symbol(U, Decl(dependentReturnType13.ts, 97, 40)) U extends number ? ->U : Symbol(U, Decl(dependentReturnType13.ts, 94, 40)) +>U : Symbol(U, Decl(dependentReturnType13.ts, 97, 40)) T extends string[] ? 2 : ->T : Symbol(T, Decl(dependentReturnType13.ts, 94, 12)) +>T : Symbol(T, Decl(dependentReturnType13.ts, 97, 12)) T extends string ? 1 : ->T : Symbol(T, Decl(dependentReturnType13.ts, 94, 12)) +>T : Symbol(T, Decl(dependentReturnType13.ts, 97, 12)) never : U extends number[] ? ->U : Symbol(U, Decl(dependentReturnType13.ts, 94, 40)) +>U : Symbol(U, Decl(dependentReturnType13.ts, 97, 40)) T extends string[] ? 4 : ->T : Symbol(T, Decl(dependentReturnType13.ts, 94, 12)) +>T : Symbol(T, Decl(dependentReturnType13.ts, 97, 12)) T extends string ? 3 : ->T : Symbol(T, Decl(dependentReturnType13.ts, 94, 12)) +>T : Symbol(T, Decl(dependentReturnType13.ts, 97, 12)) never : never { @@ -263,13 +269,13 @@ function f7(param: T, >Array.isArray : Symbol(ArrayConstructor.isArray, Decl(lib.es5.d.ts, --, --)) >Array : Symbol(Array, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --)) >isArray : Symbol(ArrayConstructor.isArray, Decl(lib.es5.d.ts, --, --)) ->other : Symbol(other, Decl(dependentReturnType13.ts, 94, 79)) +>other : Symbol(other, Decl(dependentReturnType13.ts, 97, 79)) if (Array.isArray(param)) { >Array.isArray : Symbol(ArrayConstructor.isArray, Decl(lib.es5.d.ts, --, --)) >Array : Symbol(Array, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --)) >isArray : Symbol(ArrayConstructor.isArray, Decl(lib.es5.d.ts, --, --)) ->param : Symbol(param, Decl(dependentReturnType13.ts, 94, 70)) +>param : Symbol(param, Decl(dependentReturnType13.ts, 97, 70)) return 4; } @@ -279,7 +285,7 @@ function f7(param: T, >Array.isArray : Symbol(ArrayConstructor.isArray, Decl(lib.es5.d.ts, --, --)) >Array : Symbol(Array, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --)) >isArray : Symbol(ArrayConstructor.isArray, Decl(lib.es5.d.ts, --, --)) ->param : Symbol(param, Decl(dependentReturnType13.ts, 94, 70)) +>param : Symbol(param, Decl(dependentReturnType13.ts, 97, 70)) return 2; } diff --git a/tests/baselines/reference/dependentReturnType13.types b/tests/baselines/reference/dependentReturnType13.types index f7842900878..122c8cc84ab 100644 --- a/tests/baselines/reference/dependentReturnType13.types +++ b/tests/baselines/reference/dependentReturnType13.types @@ -63,6 +63,12 @@ function f2(param: T): > : ^ } +declare function isNumberArray(x: unknown): x is number[]; +>isNumberArray : (x: unknown) => x is number[] +> : ^ ^^ ^^^^^ +>x : unknown +> : ^^^^^^^ + function f3(param: T): // Bad. >f3 : (param: T) => T extends string ? 1 : T extends string[] ? 2 : T extends number[] ? 3 : never > : ^ ^^^^^^^^^ ^^ ^^ ^^^^^ @@ -73,6 +79,18 @@ function f3(param: T): // Bad. T extends string[] ? 2 : T extends number[] ? 3 : never { + if (isNumberArray(param)) { +>isNumberArray(param) : boolean +> : ^^^^^^^ +>isNumberArray : (x: unknown) => x is number[] +> : ^ ^^ ^^^^^ +>param : string | string[] | number[] +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + + return 3; +>3 : 3 +> : ^ + } if (Array.isArray(param)) { >Array.isArray(param) : boolean > : ^^^^^^^ @@ -82,8 +100,8 @@ function f3(param: T): // Bad. > : ^^^^^^^^^^^^^^^^ >isArray : (arg: any) => arg is any[] > : ^ ^^ ^^^^^ ->param : string | string[] | number[] -> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>param : string | string[] +> : ^^^^^^^^^^^^^^^^^ return 2; >2 : 2 @@ -284,12 +302,6 @@ function f6(param: T, > : ^ } -declare function isNumberArray(x: unknown): x is number[]; ->isNumberArray : (x: unknown) => x is number[] -> : ^ ^^ ^^^^^ ->x : unknown -> : ^^^^^^^ - function f7(param: T, other: U): >f7 : (param: T, other: U) => U extends number ? T extends string[] ? 2 : T extends string ? 1 : never : U extends number[] ? T extends string[] ? 4 : T extends string ? 3 : never : never > : ^ ^^^^^^^^^ ^^ ^^^^^^^^^ ^^ ^^ ^^ ^^ ^^^^^ diff --git a/tests/cases/compiler/dependentReturnType13.ts b/tests/cases/compiler/dependentReturnType13.ts index ab28adf3e2a..7278050ce4a 100644 --- a/tests/cases/compiler/dependentReturnType13.ts +++ b/tests/cases/compiler/dependentReturnType13.ts @@ -24,11 +24,16 @@ function f2(param: T): return 1; } +declare function isNumberArray(x: unknown): x is number[]; + function f3(param: T): // Bad. T extends string ? 1 : T extends string[] ? 2 : T extends number[] ? 3 : never { + if (isNumberArray(param)) { + return 3; + } if (Array.isArray(param)) { return 2; } @@ -94,8 +99,6 @@ function f6(param: T, return 5; } -declare function isNumberArray(x: unknown): x is number[]; - function f7(param: T, other: U): U extends number ? T extends string[] ? 2 :