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>; // все поля optionaltype UReq = Required<User>; // все поля обязательныtype URO = Readonly<User>; // readonlytype Public = Omit<User, 'password'>; // без passwordtype Card = Pick<User, 'id' | 'name'>; // только id+nametype 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) хелперы.