#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);
}