【问题标题】:Typescript: How to use an enum to enforce that an array will contain specific values only from that enum?打字稿:如何使用枚举来强制数组仅包含来自该枚举的特定值?
【发布时间】:2020-08-11 04:12:55
【问题描述】:

我在 Angular 中有一个 HTTP 服务,它返回允许特定用户访问的权限。示例响应如下:-

{
    "accessId": 4209318492034,
    "folderPath": "data/sample_folder/",
    "permissions": [
        "READ",
        "WRITE"
    ]
}

具体来说,权限字段是一个数组,它将仅包含以下字符串,"READ"(必填)和"WRITE"(可选,可能存在也可能不存在)。

我想使用接口输入这个响应,并且为了强制在权限数组中只存在这些字符串,我创建了一个 Enum,如下所示:-

enum Permissions {
    READ = 'READ',
    WRITE = 'WRITE'
}

但是在界面中使用它来进行如下响应是行不通的:-

export interface UserAccess {
    accessId: string;
    folderPath: string;
    permissions: Permissions[]
}

如何强制权限数组仅包含来自已定义权限字符串枚举的值?

【问题讨论】:

  • TypeScript 不做运行时的事情:你需要自己在运行时执行检查并在必要时抛出错误。

标签: angular typescript enums


【解决方案1】:

不要使用枚举,使用类型:

export type Permissions = 'READ'|'WRITE'

export interface UserAccess {
    accessId: string;
    folderPath: string;
    permissions: Permissions[]
}

【讨论】:

  • 这比之前的解决方案好多了!标记为已接受。
【解决方案2】:

您可能想尝试以下方法:

export interface UserAccess {
  permissions:  (keyof typeof Permissions)[]
}

注意:TypeScript 只是一个编译时概念,在运行时不强制执行任何操作。

【讨论】:

  • 这可行,但我宁愿通过在运行时强制执行显式错误来做到这一点,而不是这样做。接受,因为它是一个有效的解决方案。
猜你喜欢
  • 1970-01-01
  • 2022-06-11
  • 2020-05-09
  • 1970-01-01
  • 1970-01-01
  • 2019-03-04
  • 2011-09-07
  • 2020-01-29
  • 2019-09-25
相关资源
最近更新 更多