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
}
目前打字稿抱怨这个......
解决此问题的最佳方法是什么?
解决方案
您可以使用现有对象中的键创建一个创建新对象并使用您指定的值填充其属性的函数:
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;
}
希望有帮助。祝你好运。
推荐阅读
- google-data-studio - 如何让我的社区连接器在 Datastudio 中触发“日期范围维度”?
- spring-cloud - 使用带有 Spring Cloud 断路器的注释 - Resilience4j
- ios - 通用链接在 iOS 13 上无法正常工作(未下载 AASA)
- kotlin - com.google.gson.internal.LinkedTreeMap 无法转换为我的自定义类
- xdebug - 如何让我的 API 响应更快?
- xaml - 如何将 datepicker 绑定到 viewModel?
- syntax - 编写不带括号的 APL 公式
- angular - 角度反应形式的验证
- php - PHP Insert INTO DB 不适用于提交按钮
- r - 这是执行数据帧函数后的 5*5 数组吗?