type ValueOf<X> = X extends {[Key in keyof X]: infer Value} ? Value : never;
type Trace<T extends any[][]> = {[Y in keyof T]: ValueOf<{[X in keyof T[Y] as X extends Y ? X : never]: T[Y][X]}>}[number];
It passes
import type { Equal, Expect } from '@type-challenges/utils'
type cases = [
Expect<Equal<Trace<[[1, 2], [3, 4]]>, 1 | 4>>,
Expect<Equal<Trace<[[0, 1, 1], [2, 0, 2], [3, 3, 0]]>, 0>>,
Expect<Equal<Trace<[['a', 'b', ''], ['c', '', ''], ['d', 'e', 'f']]>, 'a' | '' | 'f'>>,
]
Solution by ywj3493 #36505
type Trace<T extends any[][], Count extends number[] = []> =
T extends [infer Head extends any[], ...infer Rest extends any[][]]
? Head[Count['length']] | Trace<Rest, [...Count, 0]>
: never
Solution by poohghg #35972
// your answers 1
type Trace<T extends any[][], K extends unknown[] = []> = T extends [infer F extends unknown[], ...infer R extends any[][]]
? Trace<R, [...K, F[K['length']]]>
: K[number]
// answer 2
type Trace<T extends any[][]> = {[P in keyof T]: T[P][P & keyof T[P]]}[number]
Solution by BruceYuj #35404
Feel happy about this solution 😊
type Trace<T extends any[][], All extends any[] = []> = T extends [
...infer R,
infer L,
]
? L extends any[]
? R extends any[][]
? Trace<R, [...All, L[R["length"]]]>
: "R is not any[][]"
: "L is not any[]"
: All[number];
Solution by StevenJPx2 #35311
type Trace<T extends unknown[][], C extends 1[] = [], R = never> = C['length'] extends T['length']
? R
: Trace<T, [...C, 1], R | T[C['length']][C['length']]>;
Solution by alexandroppolus #35293
type Trace<T extends any[][]> = {[P in keyof T]: T[P][P & keyof T[P]]}[number]
Solution by teamchong #35247