Полезные типы в TypeScript

В TypeScript есть много удобных типов которые позволяет сделать код проще и понятнее. Эти типы доступны из коробки и не требуют импортов или других дополнительных действий. Вот некоторые из них:

ReturnType<Type>

Этот тип позволяет достать тип возвращаемого значения из функции.

1const fn = () => 1; 2type T = ReturnType<typeof fn>; // number

Awaited<Type>

Этот тип позволяет достать тип значения из промиса.

1const fn = () => Promise.resolve("hello"); 2type T = Awaited<ReturnType<typeof fn>>; // string

Partial<Type>

Этот тип позволяет сделать все свойства типа необязательными.

1interface User { 2 name: string; 3 email: string; 4} 5 6type PartialUser = Partial<User>; // { name?: string | undefined; email?: string | undefined; }

Required<Type>

Этот тип позволяет сделать все свойства типа обязательными.

1interface User { 2 name?: string; 3 email?: string; 4} 5 6type RequiredUser = Required<User>; // { name: string; email: string; }

Pick<Type, Keys>

Этот тип позволяет создать новый тип из другого типа, используя указанные свойства.

1interface User { 2 name: string; 3 email: string; 4 age: number; 5} 6 7type UserWithoutAge = Pick<User, "name" | "email">; // { name: string; email: string; }

Omit<Type, Keys>

Этот тип позволяет исключить из типа указанные свойства.

1interface User { 2 name: string; 3 email: string; 4 age: number; 5} 6 7type UserWithoutAge = Omit<User, "age">; // { name: string; email: string; }

Record<Keys, Type>

Этот тип позволяет создать новый тип из указанных ключей и типа значений.

1type Counter = Record<string, number>; 2 3const counter: Counter = { 4 a: 1, 5 b: 2, 6 c: 3, 7};

Более сложный пример:

1type User = { 2 id: string; 3 name: string; 4 email: string; 5} 6 7type UsersById = Record<User["id"], Omit<User, "id">>; } 8 9const users: UsersById = { 10 "1": { name: "John", email: "john@me.com" }, 11 "2": { name: "Jane", email: "jane@acme.com" }, 12}

Для более подробной информации о типах в TypeScript, смотрите документацию.