Я наткнулся на определенный синтаксис Typescript, который я нахожу запутанным.Вот два примера, которые были написаны членами команды Typescript.
Пример 1
type BoxedArray<T> = { array: T[] };
type Boxed<T> = T extends any[] ? BoxedArray<T[number]> : BoxedValue<T>;
type T21 = Boxed<number[]>; // BoxedArray<number>;
source
Вот как я наивно прочел это:
// Boxed receives a type parameter - T = number[]
// Boxed passes BoxedArray an Array of T
// Therefore type T21 = BoxedArray<number[][]>
Пример 2
type DeepReadonly<T> =
T extends any[] ? DeepReadonlyArray<T[number]> :
T extends object ? DeepReadonlyObject<T> :
T;
interface DeepReadonlyArray<T> extends ReadonlyArray<DeepReadonly<T>> {}
source
Я понимаю, что этот синтаксис чем-то похож на infer.Я видел это здесь и там, но я все еще не совсем понимаю структуру и не мог найти информацию об этом.