将枚举映射到键或值的类型

时间:2020-04-19 11:17:25

标签: typescript types enums type-conversion

使用打字稿我想将Enum转换为

type keys = "key1"| "key2"
// or
type values = "value1" | "value2"

我可以在课堂上做

class C { a: number; b: string;}
type Keys = keyof C; // "x" | "y"
type Values = C[keyof C]; // string | number

我想做什么

enum Roles {Admin = "admin", Client = "client"};
? --> type Keys = ...; // "Admin" | "Client" 
? --> type Values = ...; // "admin" | "client"; 

可能会有所帮助

enum Roles {Admin = "admin", Client = "client"};

type values = {[K in Roles]: K}  // { admin: Roles.Admin; client: Roles.Client; }

2 个答案:

答案 0 :(得分:1)

使用枚举,我不确定该怎么做,但是您可以使用type来实现所需的目标:

type RolesType = { Admin: "admin", Client: "client"}

type Keys = keyof RolesType    // "Admin" | "Client"
type Values = RolesType[Keys]  // "admin" | "client"

答案 1 :(得分:0)

虽然您可以很容易地以keyof typeof Roles的形式获取枚举键(这很好地解释了here),但不幸的是,无法获得枚举值联合类型。有关更多详细信息,请参见类似问题的this answer。一种解决方法是使用Object而不是JeromeBu suggested枚举:

type Roles = { Admin: "admin", Client: "client" };
type Keys = keyof Roles;
type Values = Roles[Keys];