Вступ до відображених типів 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
, який включає лише рядкові властивості з Користувач
тип.
Розширені зіставлені типи
Розширені варіанти використання зіставлених типів включають створення типів, які змінюють існуючі типи на основі різних умов. Наприклад, зіставлений тип, який додає суфікс до кожної назви властивості:
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.