【发布时间】:2018-06-18 09:32:18
【问题描述】:
假设我有一个包含一些数据的对象。我想为所有类型构建一个通用映射器(分别只有一个函数 - 我不想一直实例化一个新类),以便像这样使用:this.responseMapper.map<CommentDTO>(data);
它应该简单地从给定类型中获取所有属性并将数据映射到它。 到目前为止我尝试了什么:
public map<T>(values: any): T {
const instance = new T();
return Object.keys(instance).reduce((acc, key) => {
acc[key] = values[key];
return acc;
}, {}) as T;
}
new T(); 会抛出错误:'T' only refers to a type, but is being used as a value here.
这样做的正确方法是什么?
【问题讨论】:
-
如果添加参数
type: typeof T,并调用new type(),是否编译? -
不,它没有,不,这不是真正的重复,因为我不想一直实例化新的映射器类。
-
我明白了,感谢您的澄清。措辞使它看起来正是您想要做的。如果你只是想过滤掉不属于类型键的键,一些函数库会调用这个操作
pick。 -
那么您介意删除标志吗?
-
我可以投票重新开放,就像我可以投票关闭一样。我会去做。您可以通过编辑来澄清您的问题,这会将问题置于重新打开队列中。
标签: javascript class typescript object mapping