Для вложенного массива задайте рекурсивное объединение T и NestedArray<T>. Для извлечения типа конечного элемента используйте conditional type с infer.
Определение типа массива произвольной вложенности
Для вложенного массива задайте рекурсивное объединение T и NestedArray<T>. Для извлечения типа конечного элемента используйте conditional type с infer.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Необходимо задать типизацию массива, элементы которого могут быть вложены на любое количество уровней. Требуется описать такой тип так, чтобы TypeScript корректно выводил типы как для простых значений, так и для вложенных массивов любой глубины. При этом следует использовать возможности рекурсивных типов и условных операторов типов, не меняя при этом любые уже существующие блоки кода (их в задаче нет).
Ответ
Для вложенного массива задайте рекурсивное объединение T и NestedArray<T>. Для извлечения типа конечного элемента используйте conditional type с infer.
type NestedArray<T> = Array<T | NestedArray<T>>;
type Leaf<T> = T extends readonly (infer Item)[] ? Leaf<Item> : T;
const values: NestedArray<number> = [1, [2, [3]]];
type Value = Leaf<[number, [number, [number]]]>; // number
Первый тип описывает произвольную вложенность, второй раскрывает конечный тип конкретного конечного массива. Применять Leaf к самому бесконечно рекурсивному NestedArray не следует: можно превысить глубину инстанцирования TypeScript. Эти типы не проверяют JSON во время выполнения.