首页 > 解决方案 > 使用枚举作为模型来创建新对象?

问题描述

我有一个枚举如下:

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
}

目前打字稿抱怨这个......

解决此问题的最佳方法是什么?

标签: typescript

解决方案


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

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;
}

希望有帮助。祝你好运。


推荐阅读