update tests

This commit is contained in:
Gabriela Araujo Britto
2025-03-05 11:50:53 -08:00
parent 3c5327e479
commit 7464af0f09
5 changed files with 131 additions and 110 deletions

View File

@@ -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

View File

@@ -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<T extends string | string[]>(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<T extends string | string[] | number[]>(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<T extends string | string[], U extends number | number[]>(param: T, other: U):
U extends number ?
T extends string[] ? 2 :

View File

@@ -51,27 +51,38 @@ function f2<T extends string | string[] | number[]>(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<T extends string | string[] | number[]>(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<T extends string | string[] | number[]>(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<T extends Cat | Dog>(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<T extends string | number | string[]>(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<T extends string | number[] | string[], U extends boolean>(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<T extends string | number[] | string[], U extends boolean>(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<T extends string | string[], U extends number | number[]>(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<T extends string | string[], U extends number | number[]>(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<T extends string | string[], U extends number | number[]>(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;
}

View File

@@ -63,6 +63,12 @@ function f2<T extends string | string[] | number[]>(param: T):
> : ^
}
declare function isNumberArray(x: unknown): x is number[];
>isNumberArray : (x: unknown) => x is number[]
> : ^ ^^ ^^^^^
>x : unknown
> : ^^^^^^^
function f3<T extends string | string[] | number[]>(param: T): // Bad.
>f3 : <T extends string | string[] | number[]>(param: T) => T extends string ? 1 : T extends string[] ? 2 : T extends number[] ? 3 : never
> : ^ ^^^^^^^^^ ^^ ^^ ^^^^^
@@ -73,6 +79,18 @@ function f3<T extends string | string[] | number[]>(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<T extends string | string[] | number[]>(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<T extends string | number[] | string[], U extends boolean>(param: T,
> : ^
}
declare function isNumberArray(x: unknown): x is number[];
>isNumberArray : (x: unknown) => x is number[]
> : ^ ^^ ^^^^^
>x : unknown
> : ^^^^^^^
function f7<T extends string | string[], U extends number | number[]>(param: T, other: U):
>f7 : <T extends string | string[], U extends number | number[]>(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
> : ^ ^^^^^^^^^ ^^ ^^^^^^^^^ ^^ ^^ ^^ ^^ ^^^^^

View File

@@ -24,11 +24,16 @@ function f2<T extends string | string[] | number[]>(param: T):
return 1;
}
declare function isNumberArray(x: unknown): x is number[];
function f3<T extends string | string[] | number[]>(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<T extends string | number[] | string[], U extends boolean>(param: T,
return 5;
}
declare function isNumberArray(x: unknown): x is number[];
function f7<T extends string | string[], U extends number | number[]>(param: T, other: U):
U extends number ?
T extends string[] ? 2 :