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

问题描述

我在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字符串枚举中的值?

解决方法

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

export type Permissions = 'READ'|'WRITE'

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

您可能要尝试以下操作:

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

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

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...