在打字稿中,我们可以将两个枚举转换为一个对象键值吗

时间:2021-06-24 14:48:26

标签: javascript node.js angular typescript

我有两个枚举 Key & Label 和一个接口 IOption 并且使用枚举我想创建一个数组的 Iptions 对象

const enum Key {
    Flag = 'flag',
    Checkbox = 'checkbox',
    Star = 'star'
}

const enum Label {
    Flag = 'Flag',
    Checkbox = 'Checbox',
    Star = 'Start'
}

interface IOption {
  key: Key;
  label: Label;
}

const dropDowOptions: Ioptions[] 

实现像这样的 IOption 数组的最佳方法是什么

const dropDownOptions = [
                         {myKey: Key.Flag,  myLabel: Label.Flag },
                         {myKey: Key.Star, myLabel: Label.Flag},
                         {myKey: Key.CheckBox, myLael: Label.Checkbox}  
                         ]

2 个答案:

答案 0 :(得分:0)

我做了这个:

enum Key {
    Flag = 'flag',
    Checkbox = 'checkbox',
    Star = 'star'
}

enum Label {
    Flag = 'Flag',
    Checkbox = 'Checbox',
    Star = 'Start'
}

interface IOption {
  key: Key;
  label: Label;
}

var dropDownOptions: IOption[] = new Array<IOption>();

Object.keys(Key).forEach(key => {
    dropDownOptions.push({
        key: Key[key],
        label: Label[key]
    });
});
console.log(dropDownOptions);

输出:

[
  { key: 'flag', label: 'Flag' },
  { key: 'checkbox', label: 'Checbox' },        
  { key: 'star', label: 'Start' }
]

答案 1 :(得分:0)

如果我正确理解了问题,您想更改界面以描述常量 dropDownOptions ...您可以这样做

interface IOption {
    myKey: Key;
    myLabel: Label;
}


// what is the best way to achieve an array of IOption like this

const dropDownOptions: IOption[] = [
    { myKey: Key.Flag, myLabel: Label.Flag },
    { myKey: Key.Star, myLabel: Label.Flag },
    { myKey: Key.Checkbox, myLabel: Label.Checkbox }
]

working example