繁体   English   中英

打字稿:如何将对象映射到类型?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM