0Pricing
TypeScript Academy · Урок

Типизация строковых шаблонов (параметры маршрутов, имена событий)

Ограничивайте строки типами шаблонных литералов: шаблонами параметров маршрутов, пространствами имён событий и безопасными построителями.

«Типизация строковых шаблонов (параметры маршрутов, имена событий)» — бесплатный урок 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 — локальная установка не требуется.

Все уроки этого курса

  1. Отображаемые типы с +/-readonly и +/-?
  2. Переназначение ключей и типы шаблонных литералов
  3. Типизация строковых шаблонов (параметры маршрутов, имена событий)
← Назад к TypeScript Academy