Отображение всех значений перечисления в массив интерфейса в TypeScript - PullRequest
0 голосов
/ 20 сентября 2018

Я хочу отобразить все значения перечисления в интерфейс массива SelectItem.

selectItem.ts

 export interface SelectItem {
        label?: string;
        value: any;
    }

sex.ts

export enum Gender{
  Description("MaleDescriptionExample")  //?????????
  Male = 1,
  Description("FemaleDescriptionExample")//?????????
  Female = 2
}

Я хочу ниже дляпример.Я написал как C #.Но я хочу это в машинописи.Как я могу это сделать?

  var myList= selectItem[] ;
  this.myList=Gender.map(p=>  //?????????
    label= p.Description,
    value= (int)(p.value)
  );

1 Ответ

0 голосов
/ 20 сентября 2018

Вы не можете добавлять декораторы в перечисления, как если бы вы добавляли атрибуты в перечисления C #.Однако мы можем создать тип с теми же ключами, что и enum, что заставит нас указать все ключи enum с их описанием строки.

С этим объектом нам просто нужно получить ключи перечисления и найти значения в перечислении и описание в нашем дополнительном объекте.

export enum Gender {
  Male = 1,
  Female = 2
}

// We will geta an error if we have missing/ extra or misspelled keys
let descriptions: { [P in keyof typeof Gender]: string } = {
  Female: "FemaleDescriptionExample",
  Male: "MaleDescriptionExample"
}
export interface SelectItem {
  label?: string;
  value: any;
}
var myList: SelectItem[] = (Object.keys(Gender) as Array<keyof typeof Gender>)
  .filter(p => typeof Gender[p] === "number") // The enum contains both the lookup and the reverse lookup, we only need name->value so we take only the number keys
  .map(p => ({
    label: descriptions[p],
    value: Gender[p]
  }));

console.log(myList);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...