Типы Utility Typescript
![](/static/storage/64298665001750779355831600012315854536.png)
Привет народ! Как хорошо, что ты снова есть!
В этой небольшой статье я расскажу о служебных типах Typescript.
Служебные типы — это функции, доступные во всем машинописном коде. Итак, давайте посмотрим на некоторые из них:
Типы утилит для объектов
Сначала давайте определим некоторый объект как тип:
type User = {
id: number;
name: string;
userName?: string;
}
Partial
Делает все свойства типа неопределенными.
![](/static/storage/237708752567924770411877191898586383782.png)
Required
Делает все свойства требуемого типа.
type RequiredUser = Required<User>;
![](/static/storage/65196506985673404905618950691611481502.png)
Omit
Мы можем опустить какое-то свойство типа и создать новый тип без него.
type OmitUserUsername = Omit<User, "userName">;
![](/static/storage/153710031498494616916289924660502491720.png)
Мы можем передать типы union для большего количества свойств:
type OnlyId = Omit<User, "userName" | "name">;
![](/static/storage/200850813418636861184155110373754465309.png)
Pick
В отличие от Omit, мы можем выбрать некоторое свойство типа.
type PickId = Pick<User, "id">;
![](/static/storage/222613281531751996935440657639548041971.png)
И в качестве исключения мы можем передать типы объединения для получения большего количества свойств:
type WithoutUser = Pick<User, "id" | "userName">;
![](/static/storage/120337673128515249325529161598258484466.png)
ReadOnly
Делает свойства доступными только для чтения.
type ReadOnlyUser = Readonly<User>;
![](/static/storage/303954088241645378194500909903961179372.png)
Если мы попытаемся изменить какое-либо свойство, мы получим некоторую ошибку:
![](/static/storage/87555483270972664676764806787598634759.png)
![](/static/storage/82225617374399407917619437195696660585.png)
Служебные типы для типов союзов
Давайте создадим наш Union Type:
type Role = "admin" | "user" | "manager";
Exclude
Он удалит некоторые типы союзов
type NoUserRole = Exclude<Role, "user">;
![](/static/storage/297074605389595909263409743365116392962.png)
Extract
Давайте создадим еще один тип объединения:
type RoleAttributes =
| {
role: "admin";
permission: "all";
}
| {
role: "user";
}
| {
role: "manager";
};
Теперь давайте извлечем admin
, используя:
type AdminRole = Extract<RoleAttributes, { role: "admin" }>;
![](/static/storage/181625647862318781969544489706291778360.png)
NonNullable
Давайте определим тип объединения, результатом которого может быть строка, null
или undefined
:
type MaybeString = string | null | undefined;
type NonNullableString = NonNullable<MaybeString>;
![](/static/storage/188781211457966686240904895036516307567.png)
Типы Utility для функций
Давайте определим наш тип функции:
type myFunction = (a: number, b: number) => number;
ReturnType
Он вернет тип return
функции
type ReturnValueFunction = ReturnType<myFunction>;
![](/static/storage/64776656379888055421109383752185026209.png)
Parameters
Он вернет кортеж параметров функции:
type MyParameters = Parameters<myFunction>;
![](/static/storage/142568060972559292981722676510906068898.png)
Awaited
Он вернет тип обещания
Давайте определим тип Promise
type PromiseUser= Promise<User>;
type Result = Awaited<PromiseUser>;
![](/static/storage/145352371850386992357330922063882645725.png)
И все, ребята! Давайте посмотрим на вызов?
Определите тип результата этой асинхронной функции:
const getMyName = async () => {
return {
name: "Kevin",
};
};
Как мы можем получить тип объекта, который является строкой?
Ответ:
type MyNameResult = Awaited<ReturnType<typeof getMyName>>;
![](/static/storage/198577617809701836720010208607615759526.png)
Итак, спасибо, ребята, что зашли так далеко.
Вот и все, Typescript предлагает несколько служебных типов, которые могут помочь вам в разработке.