Skip to content

Утилитные типы TypeScript объяснённые

Встроенные утилитные типы TypeScript и сопутствующие ключевые слова, сгруппированные по задаче: изменить форму объекта, отфильтровать объединение, описать функцию, преобразовать строковый литерал и извлечь типы из значений. Каждая строка показывает тип и реальный алиас, который вы бы написали.

Утилитные типы — это обобщённые функции для типов: они принимают один или два типа и возвращают новый, поэтому не нужно расписывать каждую форму вручную. Они незаменимы для производных типов, когда источник истины — другой тип или значение и вы хотите, чтобы ваши типы следовали за ним автоматически. Общее правило: выводите, а не дублируйте — измените источник, и производный тип последует за ним.

Справочная таблица · 22 записи
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.type IsStr<T> = T extends string ? true : false