Utility Type Record в TypeScript
Record — это utility тип в TypeScript, который позволяет создавать новый объектный тип с определенными ключами и значениями. Он предоставляет удобный способ задания типа для объектов, где ключи могут быть ограничены конкретными значениями, а значения имеют определённый тип.
Синтаксис:
Record<K, T>
K
— тип ключей объекта (например, строки или числа).T
— тип значений, которые соответствуют этим ключам.
Тип Record
позволяет определить, что объект должен иметь определённый набор ключей и значений, что делает его очень полезным при работе с заранее известными ключами и типами значений.
Пример использования Record
-
Создание объекта с предсказуемыми ключами и значениями:
Предположим, у нас есть список ролей в приложении, и мы хотим создать объект, где каждому ключу (роли) соответствует массив строк, представляющих права пользователя.
type UserRoles = "admin" | "user" | "guest"; type RolePermissions = Record<UserRoles, string[]>; const rolePermissions: RolePermissions = { admin: ["create", "edit", "delete"], user: ["view", "edit"], guest: ["view"], };
UserRoles
— это тип, представляющий роли пользователей (например,"admin", "user", "guest"
).Record<UserRoles, string[]>
создаёт объект, где ключи — это строки, соответствующие ролям, а значения — массивы строк, которые содержат права доступа для каждой роли.
-
Использование Record для создания объектов с динамическими ключами: Вы можете использовать Record, чтобы создавать объекты с динамическими ключами, например, на основе значений перечислений.
enum Status { Active = "active", Inactive = "inactive", Pending = "pending", } type StatusMessage = Record<Status, string>; const statusMessages: StatusMessage = { [Status.Active]: "Your account is active.", [Status.Inactive]: "Your account is inactive.", [Status.Pending]: "Your account is pending approval.", };
Status
— это перечисление, которое представляет возможные статусы.Record<Status, string>
создаёт объект, где ключи — это значения из перечисления Status, а значения — строки, представляющие сообщения для каждого статуса.