Встроенные утилитные типы TypeScript и сопутствующие ключевые слова, сгруппированные по задаче: изменить форму объекта, отфильтровать объединение, описать функцию, преобразовать строковый литерал и извлечь типы из значений. Каждая строка показывает тип и реальный алиас, который вы бы написали.
Утилитные типы — это обобщённые функции для типов: они принимают один или два типа и возвращают новый, поэтому не нужно расписывать каждую форму вручную. Они незаменимы для производных типов, когда источник истины — другой тип или значение и вы хотите, чтобы ваши типы следовали за ним автоматически. Общее правило: выводите, а не дублируйте — измените источник, и производный тип последует за ним.
Справочная таблица · 22 записи
Утилитные типы TypeScriptExplained
22 of 22 rows
Форма объекта
T, где каждое свойство сделано необязательным.
type Update = Partial<User>
T, где каждое свойство сделано обязательным.
type Strict = Required<Opts>
T, где каждое свойство сделано доступным только для чтения.
type Frozen = Readonly<User>
T, где оставлены только ключи из K.
type Preview = Pick<User, "id" | "name">
T, где удалены ключи из K.
type SafeUser = Omit<User, "password">
Объект, ключи которого — K, а значения — V.
type Scores = Record<string, number>
Фильтрация объединений
Объединение U без членов, приводимых к X.
type NoNull = Exclude<T, null>
Члены U, которые приводимы к X.
type OnlyStr = Extract<T, string>
T без null и undefined.
type Def = NonNullable<T>
Типы функций
Кортеж типов параметров функции F.
type P = Parameters<typeof fn>
Тип, который возвращает функция F.
type R = ReturnType<typeof fn>
Кортеж типов параметров конструктора F.
type C = ConstructorParameters<typeof Date>
Тип экземпляра, создаваемого конструктором F.
type D = InstanceType<typeof Date>
Тип, к которому рекурсивно разрешается Promise.
type Data = Awaited<Promise<User>>
Преобразования строковых литералов
Строковый литерал S в верхнем регистре.
type A = Uppercase<"abc"> // "ABC"
Строковый литерал S в нижнем регистре.
type B = Lowercase<"ABC"> // "abc"
S с первым символом в верхнем регистре.
type C = Capitalize<"abc"> // "Abc"
S с первым символом в нижнем регистре.
type D = Uncapitalize<"Abc"> // "aBc"
Связанные ключевые слова
Объединение ключей свойств объектного типа T.
type K = keyof User
Тип значения, без повторного его описания.
type Config = typeof defaults
Захватывает тип внутри условного типа для повторного использования.
type El<T> = T extends Array<infer I> ? I : never
Выбирает тип X или Y в зависимости от того, приводим ли T к U.