Что такое брендированные типы (Branded Types) и зачем они нужны?
УглублённыйПаттерны типизацииПродвинутые типы
- Имитация номинативной типизации в структурной системе TypeScript
- Паттерн:
type UserId = number & { readonly __brand: "UserId" }
- Предотвращает смешение семантически разных типов (UserId и OrderId, обе number)
- Валидация на границах: фабричная функция проверяет и «брендирует» значение
- Альтернатива:
unique symbol как бренд
- Утилита для снятия бренда:
type Unbrand<T> = T extends infer U & { __brand: any } ? U : T