webroad.online
  1. 1Веб
  2. 2HTML
  3. 3CSS
  4. 4JavaScript
  5. 5TypeScript
  6. 6Git
  7. 7Инструменты
  8. 8React
  9. 9Стейт-менеджмент
  10. 10Next.js
  11. 11Формы
  12. 12Данные и бэкенд
  13. 13SEO
  14. 14Tailwind CSS
  15. 15Анимации
  16. 16Тестирование
  17. 17Архитектура
TypeScript · Урок 5 из 6

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 для проверки без расширения типа.

Официальные источники

Упражнения

Была ли страница полезной?

Один клик — без регистрации.