Как создавать и использовать служебные типы TypeScript
TypeScript предоставляет набор типов утилит, которые упрощают преобразование и управление существующими типами. Эти встроенные типы утилит позволяют разработчикам манипулировать типами различными способами, помогая упростить код и избежать повторений. В этом руководстве рассматриваются некоторые из наиболее распространенных типов утилит и то, как их можно создавать и использовать в проекте TypeScript.
Что такое служебные типы TypeScript?
Типы утилит в TypeScript — это предопределенные типы, которые помогают преобразовывать другие типы. Их можно использовать для создания новых типов на основе существующих путем выбора, исключения или изменения свойств. Они играют важную роль в поддержании чистого, повторно используемого кода.
Часто используемые типы утилит TypeScript
Вот некоторые из наиболее часто используемых типов утилит TypeScript:
- Частичное<T> – делает все свойства типа
T
необязательными. - Обязательно<T> – делает все свойства типа
T
обязательными. - Только для чтения<T> – делает все свойства типа
T
доступными только для чтения. - Pick<T, K> – выбирает набор свойств
K
из типаT
. - Исключить<T, K> – Удаляет набор свойств
K
из типаT
. - Запись<K, T> – Создает тип объекта с ключами типа
K
и значениями типаT
.
Пример: использование частичного<T>
Тип утилиты Partial
делает все свойства интерфейса необязательными. Вот как это можно использовать:
interface User {
name: string;
age: number;
email: string;
}
const updateUser = (user: Partial<User>) => {
// Update logic
};
updateUser({ name: "John" });
В этом примере updateUser
принимает аргумент типа Partial<User>
, что означает, что требуются только некоторые свойства интерфейса User
.
Пример: использование Pick<T, K>
Тип утилиты Pick
позволяет выбрать подмножество свойств из типа:
interface User {
name: string;
age: number;
email: string;
}
type UserContactInfo = Pick<User, "name" | "email">;
const contactInfo: UserContactInfo = {
name: "John",
email: "john@example.com"
};
Здесь Pick<User, “name” | “email”>
создает новый тип UserContactInfo
, содержащий только свойства name
и email
из исходного интерфейса User
.
Пример: использование Omit<T, K>
Тип утилиты Omit
удаляет указанные свойства из типа:
interface User {
name: string;
age: number;
email: string;
}
type UserWithoutEmail = Omit<User, "email">;
const user: UserWithoutEmail = {
name: "John",
age: 30
};
В этом примере тип UserWithoutEmail
создается путем исключения свойства email
из интерфейса User
.
Создание пользовательских типов утилит
Пользовательские типы утилит также можно создавать с помощью расширенных функций типов TypeScript, таких как условные типы, сопоставленные типы и т. д. Вот простой пример пользовательского типа утилит, который делает все свойства необязательными:
type MyPartial<T> = {
[P in keyof T]?: T[P];
};
interface User {
name: string;
age: number;
email: string;
}
const user: MyPartial<User> = {
name: "Alice"
};
Этот пользовательский тип MyPartial
функционирует аналогично встроенному служебному типу TypeScript Partial
.
Заключение
Типы утилит TypeScript являются важной функцией для гибкой и многократно используемой работы с типами. Используя эти типы утилит, код можно сделать более лаконичным и удобным для поддержки. Независимо от того, используете ли вы встроенные типы утилит, такие как Partial
, Pick
и Omit
, или создаете пользовательские, они значительно улучшают систему типов TypeScript.