I'm unable to properly infer the first type of a tuple of arbitrary length as a tuple type, in order to maintain its label:
type First1<T extends any[]> = T extends [infer FIRST, ...any[]] ? FIRST : never
type test1 = First1<[a: number, b: boolean, c: string]> // number
type First2<T extends any[]> = T extends [infer FIRST, ...any[]] ? [FIRST] : never
type test2 = First2<[a: number, b: boolean, c: string]> // [number] <-- obv no label
type First3<T extends any[]> = T extends [...infer FIRST, any, ...any[]] ? FIRST : never
type test3 = First3<[a: number, b: boolean, c: string]> // unknown[] <-- I tried ahah
Any ideas? Playground
Expected result: [a: number]