首页 > 解决方案 > Typescript / Angular 12:访问嵌套布尔/枚举权限的结构

问题描述

具有以下 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"
}

通过项目 ID 访问权限属性:

  hasProjectRead(projectId: string): boolean {

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

错误:元素隐式具有“任何”类型,因为“任何”类型的表达式不能用于索引“权限”类型。

如果对我的方法没有任何意义,那么在这种情况下,也许另一种方法更好?

提前致谢

标签: javascriptangulartypescriptecmascript-6

解决方案


显然,解决方案很简单:

  hasProjectRead(projectId: string): boolean {

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

推荐阅读