gpt4 book ai didi

javascript - typescript :如何将对象映射到类型?

转载 作者:搜寻专家 更新时间:2023-10-30 21:00:02 24 4
gpt4 key购买 nike

假设我有一个包含一些数据的对象。我想为所有类型构建一个通用映射器(分别只有一个函数——我不想一直实例化一个新类):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.

正确的做法是什么?

最佳答案

您需要将类型构造函数传递给方法。 Typescript 在运行时将泛型删除为 T在运行时是未知的。我也会收紧 values bti 只允许 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)

关于javascript - typescript :如何将对象映射到类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48166653/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com