Расскажите об утилитарных типах в TypeScript.
Ответ от нейросети
sobes.tech AI
Утилитарные типы в TypeScript — это встроенные типы, которые позволяют преобразовывать существующие типы данных в новые типы, выполняя различные полезные операции. Они помогают повысить гибкость и переиспользуемость типов, уменьшая избыточность кода.
Основные утилитарные типы:
-
Partial<Type>: Создает новый тип, в котором все свойства
Typeстановятся необязательными.interface User { id: number; name: string; age: number; } type PartialUser = Partial<User>; // PartialUser будет { id?: number; name?: string; age?: number; } -
Readonly<Type>: Создает новый тип, в котором все свойства
Typeстановятся доступными только для чтения.interface Point { x: number; y: number; } type ReadonlyPoint = Readonly<Point>; // ReadonlyPoint будет { readonly x: number; readonly y: number; } -
Pick<Type, Keys>: Создает тип, выбирая заданный набор свойств
KeysизType.interface Product { id: number; name: string; price: number; description: string; } type ProductSummary = Pick<Product, 'id' | 'name' | 'price'>; // ProductSummary будет { id: number; name: string; price: number; } -
Omit<Type, Keys>: Создает тип, исключая заданный набор свойств
KeysизType.interface Order { id: number; productId: number; quantity: number; timestamp: string; } type OrderDetails = Omit<Order, 'timestamp'>; // OrderDetails будет { id: number; productId: number; quantity: number; } -
Exclude<Type, ExcludedUnion>: Создает тип, исключая из
Typeте элементы, которые могут быть присвоеныExcludedUnion. Используется для объединений (union types).type Colors = 'red' | 'green' | 'blue' | 'yellow'; type PrimaryColors = Exclude<Colors, 'yellow'>; // PrimaryColors будет 'red' | 'green' | 'blue' -
Extract<Type, Union>: Создает тип, выбирая из
Typeте элементы, которые могут быть присвоеныUnion. Используется для объединений.type AllAnimals = 'dog' | 'cat' | 'fish' | 'bird'; type PetAnimals = Extract<AllAnimals, 'dog' | 'cat'>; // PetAnimals будет 'dog' | 'cat' -
NonNullable<Type>: Создает тип, исключающий из
Typeзначенияnullиundefined.type MaybeString = string | null | undefined; type NotNullableString = NonNullable<MaybeString>; // NotNullableString будет string -
Record<Keys, Type>: Создает тип объекта, свойства которого имеют ключи из
Keysи значения типаType.type CityPopulation = Record<string, number>; // CityPopulation будет { [key: string]: number } const population: CityPopulation = { "Москва": 12635466, "Санкт-Петербург": 5381033, }; -
Parameters<Type>: Возвращает кортеж (tuple) типов параметров функции
Type.function greet(name: string, age: number): string { return `Hello, ${name}! You are ${age}.`; } type GreetParams = Parameters<typeof greet>; // GreetParams будет [name: string, age: number] -
ReturnType<Type>: Возвращает тип возвращаемого значения функции
Type.function calculateSum(a: number, b: number): number { return a + b; } type SumResult = ReturnType<typeof calculateSum>; // SumResult будет number -
ConstructorParameters<Type>: Возвращает кортеж (tuple) или массив типов параметров конструктора класса
Type.class MyClass { constructor(name: string, id: number) {} } type MyClassParams = ConstructorParameters<typeof MyClass>; // MyClassParams будет [name: string, id: number] -
InstanceType<Type>: Возвращает тип экземпляра класса
Type.class AnotherClass { value: string; constructor(v: string) { this.value = v; } } type AnotherClassInstance = InstanceType<typeof AnotherClass>; // AnotherClassInstance будет AnotherClass
Использование утилитарных типов делает код более безопасным, поддерживаемым и выразительным, позволяя эффективно управлять сложными типами данных.