Типизация строковых шаблонов (параметры маршрутов, имена событий)
Ограничивайте строки типами шаблонных литералов: шаблонами параметров маршрутов, пространствами имён событий и безопасными построителями.
«Типизация строковых шаблонов (параметры маршрутов, имена событий)» — бесплатный урок TypeScript Academy на CoddyKit. Это урок 3 из 3. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения TypeScript Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс TypeScript Academy содержит 3 уроков всего.
Введение
Цель: моделировать форматы строк на уровне типов. С помощью шаблонных литеральных типов можно требовать такие шаблоны, как "/users/:id" или "user:created", сохраняя удобство разработки DX.
- Ограничивать строки по префиксу и суффиксу
- Извлекать части с помощью
infer - Создавать безопасные вспомогательные средства
Параметры маршрута
Задайте простой шаблон маршрута и выведите имя параметра; для случаев, не соответствующих правилу, используйте тип, исключающий их.
type Route = `/${string}`
type RouteWithParam = `/${string}/:${string}`
type ParamOf<R extends string> = R extends `${string}/:${infer P}` ? P : never
// examples
type A = ParamOf<"/users/:id"> // "id"
type B = ParamOf<"/posts/:slug"> // "slug"Безопасный помощник маршрутов
Безопасный построитель: вспомогательная функция принимает шаблоны, начинающиеся с "/"; остальные отклоняются при компиляции.
type Path<R extends string> = R extends `/${string}` ? R : never
function route<R extends Path<R>>(r: R) { return r }
const ok = route("/users/:id") // ok
// const bad = route("users") // error: must start with "/"Пространства имён событий
Ограничивайте префиксы (например, user: и order:) и блокируйте недопустимые имена полей с помощью типов.
type EventName = `user:${string}` | `order:${string}`
function on<E extends EventName>(name: E, cb: (data: unknown) => void) {
// ... register listener
}
on("user:created", d => {}) // ok
// on("payment:done", d => {}) // error: not an EventNameРазделение события
Извлекайте две части с помощью вывода типов и преобразуйте их в типизированные поля; недопустимые форматы никогда не возникнут.
type SplitEvent<E extends string> = E extends `${infer Scope}:${infer Action}` ? { scope: Scope; action: Action } : never
type S = SplitEvent<"user:created"> // { scope: "user"; action: "created" }
type Bad = SplitEvent<"oops"> // neverСоветы
Советы:
Сохраняйте ограничения минимальными: чрезмерно строгие шаблоны вынуждают проводить рефакторинг.
Объединяйте правила в одном месте с помощью функций-построителей.
Не забывайте отображать исходную строку на неизвестные данные и проверять их во время выполнения.
Проверка пространств имён
Быстрая проверка: какой шаблон ограничивает имена событий двумя пространствами имён?
Итоги
Итоги: ограничивайте строки по шаблонам с помощью шаблонных литеральных типов; извлекайте части с помощью вывода типов; создавайте безопасные функции-построители.
Часто задаваемые вопросы
Урок «Типизация строковых шаблонов (параметры маршрутов, имена событий)» бесплатный?
Да — полный текст урока «Типизация строковых шаблонов (параметры маршрутов, имена событий)» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс TypeScript Academy, подпишись на CoddyKit PRO. Курс TypeScript Academy содержит 3 уроков всего.
Чему я научусь в уроке «Типизация строковых шаблонов (параметры маршрутов, имена событий)»?
Ограничивайте строки типами шаблонных литералов: шаблонами параметров маршрутов, пространствами имён событий и безопасными построителями. Ты практикуешь TypeScript Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать TypeScript Academy?
Предыдущий опыт не требуется. TypeScript Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 3.
Сколько времени занимает урок «Типизация строковых шаблонов (параметры маршрутов, имена событий)»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке TypeScript Academy?
Да. Каждый урок TypeScript Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Отображаемые типы с +/-readonly и +/-?
- Переназначение ключей и типы шаблонных литералов
- Типизация строковых шаблонов (параметры маршрутов, имена событий)