Как работают Record, ReturnType, Parameters и Awaited?
Utility Types
Эти utility-типы строят тип по данным о другом типе или функции.
Record
Создаёт объект с заданным типом ключей и значений:
type Role = 'admin' | 'user';
const permissions: Record<Role, string[]> = {
admin: ['read', 'write'],
user: ['read'],
};Если пропустить ключ из Role, TypeScript выдаст ошибку.
ReturnType и Parameters
function createUser(name: string, age: number) {
return { id: 1, name, age };
}
type Created = ReturnType<typeof createUser>; // { id: number; name: string; age: number }
type Args = Parameters<typeof createUser>; // [name: string, age: number]Удобно, когда тип выводится из реализации и не нужно дублировать его вручную.
Awaited
Достаёт тип значения из промиса, в том числе вложенного:
type Data = Awaited<ReturnType<typeof fetchUser>>; // тип пользователя, а не PromiseКоротко для собеседования
Record задаёт словарь, ReturnType и Parameters извлекают типы из функций, Awaited разворачивает промис.