Как создавать и использовать служебные типы 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.