使用枚举作为模型来创建新对象?

时间:2018-07-16 22:04:44

标签: typescript

我的枚举如下:

export enum TableViewTypes {
    user = 'users',
    pitching = 'pitching',
    milestones = 'milestones',
    mediaList = 'mediaList',
    contacts = 'contacts'
}

,我需要使用它来动态创建和对象,如下所示:

const newObject = {[keyof TableViewTypes]: false};

,预期输出为:

newObject = {
    user: false,
    pitching: false,
    milestones: false,
    mediaList: false,
    contacts: false
}

当前打字稿对此有所抱怨...

最好的方法是什么?

1 个答案:

答案 0 :(得分:0)

您可以创建一个函数,该函数使用现有对象中的键来创建一个新对象并用您指定的值填充其属性:

function fillProps<T, V>(t: T, v: V) {
  const ret = {} as {-readonly [K in (string & keyof T)]: V};
  (Object.keys(t) as (string & keyof T)[]).forEach(k => ret[k]=v);
  return ret;
}

const newObject = fillProps(TableViewTypes, false);

我非常确定在运行时,它将评估您想要的内容,并且编译器将其解释为以下类型:

const newObject: {
    user: boolean;
    pitching: boolean;
    milestones: boolean;
    mediaList: boolean;
    contacts: boolean;
}

希望有帮助。祝你好运。