Перейти к содержимому

Built-in Utility Types

Часто проверяют, знаешь ли стандартные хелперы lib.es5.d.ts и понимаешь ли их реализацию. Красный флаг — путать Pick/Omit по аргументам, не знать Awaited/Parameters/NonNullable, или ConstructorParameters.

Объектные хелперы:

interface User {
id: string;
name: string;
email?: string;
password: string;
}
type UPatch = Partial<User>; // все поля optional
type UReq = Required<User>; // все поля обязательны
type URO = Readonly<User>; // readonly
type Public = Omit<User, 'password'>; // без password
type Card = Pick<User, 'id' | 'name'>; // только id+name
type ById = Record<string, User>; // словарь

Манипуляции union’ами и nullability:

type Roles = 'admin' | 'editor' | 'viewer' | null;
type R1 = Exclude<Roles, 'admin' | null>; // 'editor' | 'viewer'
type R2 = Extract<Roles, 'admin' | 'guest'>; // 'admin'
type R3 = NonNullable<Roles>; // 'admin' | 'editor' | 'viewer'

Функции, конструкторы, промисы:

function login(user: string, pass: string): Promise<{ token: string }> {
return Promise.resolve({ token: 't' });
}
type LoginRet = ReturnType<typeof login>; // Promise<{ token: string }>
type LoginArgs = Parameters<typeof login>; // [string, string]
type LoginRes = Awaited<ReturnType<typeof login>>; // { token: string }
class Service { constructor(public name: string, public port: number) {} }
type SArgs = ConstructorParameters<typeof Service>; // [string, number]
type SInst = InstanceType<typeof Service>; // Service

Итог: Знай объектные (Partial/Required/Readonly/Pick/Omit/Record), union (Exclude/Extract/NonNullable) и функциональные (ReturnType/Parameters/Awaited/ConstructorParameters/InstanceType) хелперы.