Машинописный текст / Угловой 12: Структура для доступа к вложенным разрешениям логического / перечисления

#javascript #angular #typescript #ecmascript-6

Вопрос:

Имейте следующую структуру json, представляющую project: Projects[] :

 [
  {
    "id": "345",
    "permissions": {
      "read": true,
      "write": true,
      "delete": false
    }
  },
  {
    "id": "123",
    "permissions": {
      "read": true,
      "write": true,
      "delete": false
    }
  }
]
 

Каков был бы лучший подход к определению объекта в Angular 12 / Typescript, чтобы получить доступ к разрешениям проектов?

Я хочу определить имена разрешений только в одном месте (чтение, запись, удаление), поэтому я решил использовать тип перечисления.

Образец (не работает):

 export interface Project {
  id: string;
  permissions: permissions;
}

export type permissions = {
  [key in permissionsEnum]: boolean;
}

export enum permissionsEnum {
  read = "read",
  write = "write",
  delete = "delete"
}
 

Доступ к собственности разрешения через идентификатор проекта:

   hasProjectRead(projectId: string): boolean {

    return !!this.projects.find((project => project.id === projectId amp;amp; project.permissions[permissionsEnum.read] ===  true);
  }
 

Ошибка: Элемент неявно имеет тип «любой», поскольку выражение типа «любой» нельзя использовать для индексирования типа «Разрешения».

Если нет смысла исправлять мой подход, возможно, в этом случае лучше использовать другой подход?

Заранее спасибо

Ответ №1:

Очевидно, решение было таким же простым, как:

   hasProjectRead(projectId: string): boolean {

    return !!this.projects.find((project => project.id === projectId amp;amp; project.permissions.read ===  true);
  }