Typescript:如何使用枚举强制数组仅包含该枚举中的特定值?

时间:2020-08-11 04:12:55

标签: angular typescript enums

我在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[]
}

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

2 个答案:

答案 0 :(得分:2)

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

export type Permissions = 'READ'|'WRITE'

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

答案 1 :(得分:1)

您可能要尝试以下操作:

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

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