[英]How to get object from custom key type from map in TypeScript?
[英]Typescript: How to map object to type?
假设我有一个包含一些数据的对象。 我想构建一个通用映射器(分别只是一个函数 - 我不想一直实例化一个新的类),所有类型都要这样使用: 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.
这样做的正确方法是什么?
您需要将类型构造函数传递给方法。 打字稿删除泛型在运行时T
在运行时不会知道。 此外,我会收紧一个bti的values
,只允许传入T
。这可以通过Partial<T>
来完成
public map<T>(values: Partial<T>, ctor: new () => T): T {
const instance = new ctor();
return Object.keys(instance).reduce((acc, key) => {
acc[key] = values[key];
return acc;
}, {}) as T;
}
用法:
class Data {
x: number = 0; // If we don't initialize the function will not work as keys will not return x
}
mapper.map({ x: 0 }, Data)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.