Введение в сопоставленные типы TypeScript
Отображенные типы в TypeScript предоставляют способ создания новых типов путем преобразования существующих. Они являются мощным инструментом для обработки сложных операций с типами и обеспечения безопасности типов в приложениях TypeScript. В этой статье представлены отображенные типы, объясняется их синтаксис и приводятся примеры для демонстрации их использования.
Что такое сопоставленные типы?
Отображенные типы позволяют создавать новые типы, применяя преобразование к каждому свойству существующего типа. Они часто используются для гибкого изменения или расширения типов. Базовый синтаксис отображенного типа:
type MappedType = {
[K in keyof T]: NewType;
};
В этом синтаксисе:
T
— оригинальный тип.K
представляет каждую клавишу вT
.NewType
— это новый тип, назначенный каждому свойству.
Базовый пример сопоставленных типов
Вот простой пример сопоставленного типа, который преобразует все свойства заданного типа в доступные только для чтения:
type ReadOnly = {
readonly [K in keyof T]: T[K];
};
type User = {
name: string;
age: number;
};
type ReadOnlyUser = ReadOnly;
В этом примере сопоставленный тип ReadOnly
преобразует все свойства типа User
в доступные только для чтения, в результате чего получается новый тип ReadOnlyUser
, все свойства которого являются неизменяемыми.
Отображенные типы с преобразованиями типов
Отображенные типы также могут использоваться для преобразования типов более сложными способами. Например, отображенный тип, который делает все свойства необязательными:
type Partial = {
[K in keyof T]?: T[K];
};
type User = {
name: string;
age: number;
};
type PartialUser = Partial;
В этом примере сопоставленный тип Partial
делает все свойства типа User
необязательными, что приводит к новому типу PartialUser
, где каждое свойство является необязательным.
Использование сопоставленных типов с условными типами
Отображенные типы можно комбинировать с условными типами для более сложных операций с типами. Например, создание типа, который включает только свойства определенного типа:
type OnlyStrings = {
[K in keyof T]: T[K] extends string ? T[K] : never;
};
type User = {
name: string;
age: number;
email: string;
};
type StringProperties = OnlyStrings;
В этом примере сопоставленный тип OnlyStrings
отфильтровывает свойства, которые не относятся к типу string
, в результате чего получается новый тип StringProperties
, который включает только строковые свойства из типа User
.
Расширенные типы сопоставления
Расширенные варианты использования сопоставленных типов включают создание типов, которые изменяют существующие типы на основе различных условий. Например, сопоставленный тип, который добавляет суффикс к каждому имени свойства:
type WithSuffix<T, S extends string> = {
[K in keyof T as `${string & K}${S}`]: T[K];
};
type User = {
name: string;
age: number;
};
type UserWithSuffix = WithSuffix<User, "Prop">;
В этом примере сопоставленный тип WithSuffix
добавляет суффикс к каждому имени свойства типа User
, в результате чего получается новый тип UserWithSuffix
, в котором имена свойств имеют указанный суффикс.
Заключение
Отображенные типы в TypeScript — это универсальная функция, которая позволяет разработчикам создавать новые типы путем преобразования существующих. Понимая и используя отображенные типы, разработчики могут управлять сложными преобразованиями типов и обеспечивать большую безопасность типов в своем коде TypeScript. Отображенные типы предлагают мощные возможности для улучшения и настройки определений типов в приложениях TypeScript.