Спросят с вероятностью 7%
Утилити типы (utility types) — это встроенные типы, которые помогают манипулировать другими типами и упрощают работу с ними. Они позволяют изменять, расширять, ограничивать и комбинировать типы, что делает код более гибким и безопасным. Вот некоторые из наиболее часто используемых утилити и их примеры:
1️⃣Partial
Делает все свойства типа
T необязательными.interface User {
id: number;
name: string;
email: string;
}
const updateUser = (id: number, userUpdates: Partial<User>) => {
// Обновление пользователя
};
updateUser(1, { name: 'Alice' }); // Можно передать только часть свойств2️⃣Required
Делает все свойства типа
T обязательными.interface User {
id?: number;
name?: string;
email?: string;
}
const user: Required<User> = {
id: 1,
name: 'Alice',
email: 'alice@example.com'
}; // Все свойства должны быть указаны3️⃣Readonly
Делает все свойства типа
T только для чтения.interface User {
id: number;
name: string;
email: string;
}
const user: Readonly<User> = {
id: 1,
name: 'Alice',
email: 'alice@example.com'
};
user.id = 2; // Ошибка: свойство id доступно только для чтения4️⃣Pick
Создает тип с набором свойств
K из типа T.interface User {
id: number;
name: string;
email: string;
}
const user: Pick<User, 'id' | 'name'> = {
id: 1,
name: 'Alice'
}; // Только свойства id и name5️⃣Omit
Создает тип, исключающий свойства
K из типа T.interface User {
id: number;
name: string;
email: string;
}
const user: Omit<User, 'email'> = {
id: 1,
name: 'Alice'
}; // Все свойства, кроме email6️⃣Record
Создает тип объекта, ключи которого из
K, а значения типа T.type Roles = 'admin' | 'user' | 'guest';
const roles: Record<Roles, string> = {
admin: 'Admin User',
user: 'Regular User',
guest: 'Guest User'
};
7️⃣Exclude
Создает тип, исключая из
T те типы, которые находятся в U.type T = 'a' | 'b' | 'c';
type U = 'a';
type Result = Exclude<T, U>; // 'b' | 'c'
8️⃣Extract
Создает тип, включающий только те типы из
T, которые также находятся в U.type T = 'a' | 'b' | 'c';
type U = 'a' | 'c';
type Result = Extract<T, U>; // 'a' | 'c'
9️⃣NonNullable
Исключает
null и undefined из типа T.type T = string | number | null | undefined;
type NonNullableT = NonNullable<T>; // string | number
🔟ReturnType
Получает тип возвращаемого значения функции
T.function getUser() {
return { id: 1, name: 'Alice' };
}
type User = ReturnType<typeof getUser>; // { id: number, name: string }Утилити типы помогают манипулировать типами, делая их более гибкими и безопасными. Они позволяют изменять, расширять, ограничивать и комбинировать типы. Вот основные утилити типы и их примеры:
Основные утилити
1️⃣Partial: Делает все свойства типа необязательными.
interface User {
id: number;
name: string;
email: string;
}
const updateUser = (id: number, userUpdates: Partial<User>) => {
// Обновление пользователя
};
updateUser(1, { name: 'Alice' }); // Можно передать только часть свойств
2️⃣Required: Делает все свойства типа обязательными.
interface User {
id?: number;
name?: string;
email?: string;
}
const user: Required<User> = {
id: 1,
name: 'Alice',
email: 'alice@example.com'
}; // Все свойства должны быть указаны
3️⃣Readonly: Делает все свойства типа только для чтения.
interface User {
id: number;
name: string;
email: string;
}
const user: Readonly<User> = {
id: 1,
name: 'Alice',
email: 'alice@example.com'
};
user.id = 2; // Ошибка: свойство id доступно только для чтенияУтилити типы — это встроенные типы, которые позволяют легко изменять, расширять и комбинировать другие типы. Они делают код более гибким, безопасным и удобным для поддержки.
🔥 ТОП ВОПРОСОВ С СОБЕСОВ
🔒 База собесов | 🔒 База тестовых