Utility types, as const, satisfies
Partial, Pick, Omit, Record, ReturnType и типы, выведенные из значений.
Обновлено
Что такое utility types
В TS есть готовые типы, которые преобразуют другие типы. Вместо того чтобы переписывать User в 5 вариантах (для создания, обновления, вывода), вы выводите их из одного User. Плюс: меняете User один раз — обновляются все варианты.
type User = { id: number; name: string; email: string; password: string }
type UserUpdate = Partial<User> // всё необязательное
type PublicUser = Omit<User, 'password'> // без пароля
type UserPreview = Pick<User, 'id' | 'name'> // только несколько полейСамые используемые — что делают и когда
| Утилита | Что делает | Когда |
|---|---|---|
Partial<T> |
все поля необязательные | patch / частичное обновление, значения по умолчанию |
Required<T> |
все поля обязательные | после заполнения значений по умолчанию |
Readonly<T> |
все поля readonly |
конфиг, состояние, которое не меняют |
Pick<T, K> |
только ключи K |
props для маленького компонента |
Omit<T, K> |
всё, кроме K |
убрать чувствительные или генерируемые поля (id) |
Record<K, V> |
объект с ключами K и значениями V |
словари, сопоставления |
ReturnType<F> |
тип, который возвращает функция | типизация по существующему коду |
Parameters<F> |
кортеж типов параметров | обёртки над функциями |
Awaited<T> |
тип внутри Promise | Awaited<ReturnType<typeof getUser>> |
NonNullable<T> |
убирает null и undefined |
после проверки |
typeof и keyof — типы из значений
const config = { theme: 'dark', lang: 'ru' }
type Config = typeof config // { theme: string; lang: string }
type ConfigKey = keyof Config // 'theme' | 'lang'
async function getUser(id: number) { ... }
type UserData = Awaited<ReturnType<typeof getUser>> // реальный тип, без переписыванияas const — значения как литералы
const ROLES = ['admin', 'editor', 'viewer'] as const
type Role = (typeof ROLES)[number] // 'admin' | 'editor' | 'viewer'Один список — это и значение во время выполнения (для <select>), и тип на этапе компиляции. Без дублирования.
satisfies — проверка без потери точного типа
const routes = {
home: '/',
blog: '/blog',
} satisfies Record<string, string>
routes.home // тип остаётся точно '/', а не string
routes.shop // ✗ не существуетconst x: T = ... |
const x = ... satisfies T |
|
|---|---|---|
| Проверяет форму | да | да |
Тип x |
T (шире) | точный, из значения |
Коротко
- Выводите типы из одного:
Partial,Pick,Omit,Record. typeof/ReturnType/Awaited— типы из существующего кода.as constдля списков литералов;satisfiesдля проверки без расширения типа.