Весной стартует сезон найма, успей отхватить свой оффер!

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, а значения — строки, представляющие сообщения для каждого статуса.