Глубина рекурсии условных типов
Вопрос
Рекурсивный тип Repeat<S, N> падает с «Type instantiation is excessively deep». Что из этого помогает в TS 4.5+?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Варианты ответа
- Включить
--maxNodeModuleJsDepthс большим значением глубины - Заменить
typeнаinterface: интерфейсы раскрываются лениво - Добавить
// @ts-ignoreнад объявлением рекурсивного типа - Переписать в хвостовую форму с аккумулятором в ветке условияправильный ответ
Разбор
С TS 4.5 условные типы с хвостовой рекурсией (рекурсивная ссылка непосредственно в ветке, без обёртки вроде [...Repeat<>]) вычисляются без роста стека, и лимит глубины намного выше (порядка тысячи итераций). Классический приём: тянуть результат в параметре-аккумуляторе. maxNodeModuleJsDepth про JS-файлы в node_modules, interface не умеет условные типы, @ts-ignore не отменяет ошибку вычисления на месте использования.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Предыдущий вопрос
Omit на дискриминированном объединении
Следующий вопрос
Шаблонные литеральные типы и комбинаторный взрыв