Как решать задачу на типы
Вопрос
Вам дали незнакомую задачу на типы, например CamelCase<'foo_bar_baz'>. Как будете рассуждать вслух?
Попробуйте сами
Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.
Показать ответ и разбор
Коротко
Что должно прозвучать в ответе
Проговорить вход и выход на конкретных примерах, включая граничные
Определить приём: mapped по ключам, `infer` в шаблонной строке, рекурсия по кортежу или строке
Сначала базовый случай рекурсии, потом шаг
Проверить на граничных случаях: пустая строка, без разделителя, двойной разделитель, объединение на входе
Следить за дистрибутивностью и лимитом рекурсии
Что могут спросить следом
- Что вернёт ваш тип для
'foo__bar'? - Как поведёт себя тип, если передать
string? - Как это протестировать?
Разбор
Сначала фиксирую контракт на примерах: 'foo_bar_baz' превращается в 'fooBarBaz', строка без подчёркиваний возвращается как есть. Затем выбираю приём: это разбор строки, значит шаблонный литерал с infer и рекурсия. Базовый случай: подчёркивания нет, вернуть S. Шаг: S extends `${infer Head}_${infer Tail}`, тогда результат `${Head}${CamelCase<Capitalize<Tail>>}`. После этого прогоняю граничные случаи вслух: пустая строка, двойное подчёркивание, подчёркивание в конце, объединение на входе, обычный string. Если что-то ведёт себя неожиданно, говорю об этом и предлагаю вариант. Тесты на типы пишу через Equal и Expect или через expectTypeOf в Vitest.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.