Отображение Enum на Тип ключей или значений - PullRequest
0 голосов
/ 19 апреля 2020

Используя Typescript, я хочу преобразовать 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 голосов
/ 19 апреля 2020

Хотя вы можете довольно легко получить ключи перечисления как keyof typeof Roles (это довольно хорошо объяснено здесь ), к сожалению, невозможно получить тип объединения значений перечисления. См. этот ответ аналогичного вопроса для получения более подробной информации. Обходной путь может заключаться в использовании объекта вместо перечисления, как предложено JeromeBu :

type Roles = { Admin: "admin", Client: "client" };
type Keys = keyof Roles;
type Values = Roles[Keys];
0 голосов
/ 19 апреля 2020

Используя enum, я не уверен, как это сделать, но вы можете достичь желаемого, используя тип:

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

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