Как можно использовать сопоставленные типы в TypeScript?
Сопоставленные типы (mapped types) в TypeScript позволяют создавать новые типы, основываясь на существующих. Это мощная фича, которая помогает уменьшить дублирование кода и делает его более читаемым и поддерживаемым.
Основы сопоставленных типов
Сопоставленные типы позволяют вам применять некоторую трансформацию к свойствам другого типа. Например, если у вас есть интерфейс с некоторыми свойствами, вы можете создать новый тип, где все свойства будут обязательными, или наоборот — только некоторые из них.
Пример 1: Простой сопоставленный тип
Предположим, у нас есть следующий интерфейс:
interface User {
id: number;
name: string;
email: string;
}
Мы можем создать сопоставленный тип, который сделает все свойства интерфейса User
необязательными:
type Partial<T> = {
[K in keyof T]?: T[K];
};
type PartialUser = Partial<User>;
Теперь PartialUser
будет иметь все свойства User
, но они будут необязательными. Пример использования:
const user: PartialUser = {
id: 1,
};
Пример 2: Изменение типов свойств
Мы можем не только делать свойства необязательными, но и изменять их типы. Например, создадим тип, где все свойства из
User
будут строками:
type Stringify<T> = {
[K in keyof T]: string;
};
type StringifiedUser = Stringify<User>;
Теперь StringifiedUser
имеет следующую форму:
const user: StringifiedUser = {
id: "1", // теперь строка
name: "Иван",
email: "ivan@example.com",
};
Пример 3: Комбинирование сопоставленных типов
Вы также можете комбинировать сопоставленные типы для создания более сложных типов. Например, предположим, что вы хотите
создать тип, в котором все поля из интерфейса User
будут просто строками или будут необязательными:
type Conditional<T> = {
[K in keyof T]: string | undefined;
};
type ConditionalUser = Conditional<User>;
Заключение
Сопоставленные типы — это мощный инструмент в TypeScript, который позволяет создавать новые типы с минимальными усилиями. Они помогают не только улучшить читаемость вашего кода, но и обеспечить более строгую типизацию, что особенно важно в больших проектах. Используйте их, чтобы уменьшить дублирование и повысить эффективность!
Практика — лучший способ изучения, так что попробуйте создать свои собственные сопоставленные типы и посмотрите, как они могут помочь вам в проектах.