如何键入包含一个或多个字符串集合的字符串数组



考虑以下角色进行授权:

['admin', 'manager', 'user']

如何创建一个类型,让我们称之为Roles,它是一个字符串数组(string[](,只能包含上面角色列表中的项目?此外,它可以是一个空的字符串数组。

编辑:这是我在这方面的最佳尝试:

type Roles = [] | ['user'] | ['manager'] | ['admin'] | ['user', 'manager'] | ['user', 'admin'] | ['manager', 'admin'] | ['user', 'manager', 'admin']

但它不允许:

const roles:Roles = ['admin','user']

此外,如果我有4个角色(选项数量变为n!,如上所述,不支持列表中的不同位置(,这将变得非常困难

您首先需要定义一个接受"user"、"admin"或"manager"的类型Role,如下所示:

type Role = 'user' | 'admin' | 'manager';
type Roles = Set<Role>;
//Here 'admin' role may be duplicated but Set removes the admin of last index
//making adminUser unique set of roles
const adminUser: Roles = new Set<Role>(['user', 'manager', 'admin', 'admin']); 

然后创建另一个类型,即类型为Role的Set。

您可以创建一个具有可能值的枚举,并添加string和自定义枚举之间的转换。

示例:

enum Role {
Admin = 'admin',
Manager = 'manager',
User = 'user',
}
type Roles = Role[]
const roles: Roles = [Role.Admin, Role.User]

和转换:(有关详细信息,请参阅如何在TypeScript中将字符串转换为枚举?(

function toRole(name: string): Role {
return name as keyof typeof Role
}
const rolesConverted: Roles = [toRole('admin'), toRole('user')]
const roleName = Role[Role.Admin] // 'admin'

请参阅TypeScript文档https://www.typescriptlang.org/docs/handbook/enums.html#string-枚举详细信息

最新更新