Template Literal Types
TS 4.1+: можно строить и парсить строковые литералы на уровне типов. На интервью спрашивают про Capitalize/Uncapitalize/Uppercase/Lowercase, написать тип event-имён ‘on${Capitalize<K>}’, разобрать URL по сегментам.
Конкатенация и intrinsic-типы:
type Lang = 'en' | 'ru';type Page = 'home' | 'about';type Url = `/${Lang}/${Page}`;// '/en/home' | '/en/about' | '/ru/home' | '/ru/about'
type EventName<K extends string> = `on${Capitalize<K>}`;type E = EventName<'click' | 'hover'>; // 'onClick' | 'onHover'
type Lower = Lowercase<'HELLO'>; // 'hello'Парсинг через infer + template literal:
// Разбор 'GET /users/:id' в { method, path }type Parse<S> = S extends `${infer M} ${infer P}` ? { method: M; path: P } : never;
type Route = Parse<'GET /users/:id'>; // { method: 'GET'; path: '/users/:id' }
// Извлечение параметров маршрутаtype Params<P extends string> = P extends `${string}:${infer Param}/${infer Rest}` ? Param | Params<`/${Rest}`> : P extends `${string}:${infer Param}` ? Param : never;
type R1 = Params<'/users/:id/posts/:postId'>; // 'id' | 'postId'Итог: Template literal types + infer = парсинг и генерация строк на уровне типов; intrinsic-обёртки покрывают регистр.