Ответ вслух Middle Задачи на типы обновлено

Как решать задачу на типы

Вопрос

Вам дали незнакомую задачу на типы, например CamelCase<'foo_bar_baz'>. Как будете рассуждать вслух?

Попробуйте сами

Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.

Показать ответ и разбор

Коротко

Сначала фиксирую контракт на примерах: 'foobarbaz' превращается в 'fooBarBaz', строка без подчёркиваний возвращается как есть. Затем выбираю приём: это разбор строки, значит шаблонный литерал с infer и рекурсия.

Что должно прозвучать в ответе

  • Проговорить вход и выход на конкретных примерах, включая граничные

  • Определить приём: 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 ошибок.