@@ -11,22 +11,14 @@ expectType<readonly []>(getArrayTail([] as const));
1111expectType < readonly [ ] > ( getArrayTail ( [ 'a' ] as const ) ) ;
1212expectType < readonly [ 'b' , 'c' ] > ( getArrayTail ( [ 'a' , 'b' , 'c' ] as const ) ) ;
1313
14- // Optional elements tests
15- expectType < readonly [ undefined , 'c' ] > ( getArrayTail ( [ 'a' , undefined , 'c' ] as const ) ) ;
16-
17- // Mixed optional/required
18- type MixedArray = [ string , undefined ?, number ?] ;
19- expectType < [ undefined ?, number ?] > ( getArrayTail ( [ 'hello' ] as MixedArray ) ) ;
20-
21- // Optional numbers
22- expectType < readonly [ undefined , 3 ] > ( getArrayTail ( [ 1 , undefined , 3 ] as const ) ) ;
23-
24- // Complex mixed case
25- type ComplexArray = [ string , boolean , number ?, string ?] ;
26- expectType < [ boolean , number ?, string ?] > ( getArrayTail ( [ 'test' , false ] as ComplexArray ) ) ;
14+ // Optional elements
15+ expectType < readonly [ undefined , 'c' ?] > ( getArrayTail ( [ 'a' , undefined , 'c' ] as readonly [ 'a' , undefined , 'c' ?] ) ) ;
16+ expectType < [ undefined ?, number ?] > ( getArrayTail ( [ 'hello' ] as [ string , undefined ?, number ?] ) ) ;
17+ expectType < readonly [ undefined ?, 3 ?] > ( getArrayTail ( [ 1 , undefined , 3 ] as readonly [ 1 , undefined ?, 3 ?] ) ) ;
18+ expectType < [ boolean , number ?, string ?] > ( getArrayTail ( [ 'test' , false ] as [ string , boolean , number ?, string ?] ) ) ;
2719
2820// All optional elements
29- expectType < [ 'b' ?] > ( [ ] as ArrayTail < [ 'a' ?, 'b' ?] > ) ;
21+ expectType < [ 'b' ?] > ( { } as ArrayTail < [ 'a' ?, 'b' ?] > ) ;
3022expectType < readonly [ number ?] > ( { } as ArrayTail < readonly [ string ?, number ?] > ) ;
3123
3224// Rest element
@@ -36,14 +28,23 @@ expectType<readonly [number, boolean?, ...string[]]>({} as ArrayTail<readonly [s
3628// expectType<readonly [...string[], string, number]>({} as ArrayTail<readonly [...string[], string, number]>); // Rest & Required
3729expectType < readonly [ number , ...string [ ] , boolean , bigint ] > ( { } as ArrayTail < readonly [ string , number , ...string [ ] , boolean , bigint ] > ) ; // Required, Rest & Required
3830
31+ // Labelled tuples
32+ expectType < [ y : string ] > ( { } as ArrayTail < [ x : number , y : string ] > ) ;
33+ expectType < [ bar : string , ...rest : boolean [ ] ] > ( { } as ArrayTail < [ foo : number , bar : string , ...rest : boolean [ ] ] > ) ;
34+ expectType < [ ...rest : boolean [ ] , foo : number , bar : string ] > ( { } as ArrayTail < [ ...rest : boolean [ ] , foo : number , bar : string ] > ) ;
35+
3936// Union of tuples
40- expectType < [ ] | [ 'b' ] > ( [ ] as ArrayTail < [ ] | [ 'a' , 'b' ] > ) ;
41- expectType < readonly [ 'y' ?] | [ 'b' , ...string [ ] ] | readonly [ ] > ( [ ] as ArrayTail < readonly [ 'x' ?, 'y' ?] | [ 'a' , 'b' , ...string [ ] ] | readonly string [ ] > ) ;
37+ expectType < [ ] | [ 'b' ] > ( { } as ArrayTail < [ ] | [ 'a' , 'b' ] > ) ;
38+ expectType < readonly [ 'y' ?] | [ 'b' , ...string [ ] ] | readonly string [ ] > ( { } as ArrayTail < readonly [ 'x' ?, 'y' ?] | [ 'a' , 'b' , ...string [ ] ] | readonly string [ ] > ) ;
4239expectType < [ number ] | readonly [ boolean , string ?] > ( { } as ArrayTail < [ string , number ] | readonly [ number , boolean , string ?] > ) ;
43- expectType < readonly [ number ] | readonly [ ] > ( { } as ArrayTail < readonly [ string , number ] | readonly string [ ] > ) ;
40+ expectType < readonly [ number ] | readonly string [ ] > ( { } as ArrayTail < readonly [ string , number ] | readonly string [ ] > ) ;
4441
4542// Non tuple arrays
46- expectType < [ ] > ( { } as ArrayTail < string [ ] > ) ;
47- expectType < readonly [ ] > ( { } as ArrayTail < readonly string [ ] > ) ;
48- expectType < [ ] > ( { } as ArrayTail < never [ ] > ) ;
49- expectType < [ ] > ( { } as ArrayTail < any [ ] > ) ;
43+ expectType < string [ ] > ( { } as ArrayTail < string [ ] > ) ;
44+ expectType < readonly string [ ] > ( { } as ArrayTail < readonly string [ ] > ) ;
45+ expectType < never [ ] > ( { } as ArrayTail < never [ ] > ) ;
46+ expectType < any [ ] > ( { } as ArrayTail < any [ ] > ) ;
47+
48+ // Boundary cases
49+ expectType < never > ( { } as ArrayTail < never > ) ;
50+ expectType < any > ( { } as ArrayTail < any > ) ;
0 commit comments