将打字稿类转换为对象
Posted
技术标签:
【中文标题】将打字稿类转换为对象【英文标题】:Covert typescript class to object 【发布时间】:2020-12-15 04:34:14 【问题描述】:我有一个打字稿类 A 和另一个类 B 具有类 A 的所有属性。有没有办法将所有值从类 B 复制到类 A。或者有没有办法将类 A 的所有属性作为对象.
【问题讨论】:
喜欢Object.assign()? 您需要将变量a: ClassA
中的所有字段值复制到另一个变量b:ClassB
中?
【参考方案1】:
我不太明白这个问题。如果您需要将所有字段值从类 1 复制到类 2,您可以使用:
Object.assign(cl2, cl1);
这是完整的示例(can test it here,只需按“运行”):
class Class1
public a: number = 1;
public b: number = 2;
public c: number = 3;
;
class Class2
public a?: number;
public b?: number;
public c?: number;
;
let cl1 = new Class1;
console.log('1 = ', cl1, cl1 instanceof Class1, cl1 instanceof Class2)
let cl2: Class2 = new Class2;
Object.assign(cl2, cl1);
console.log('2 = ', cl2, cl2 instanceof Class1, cl2 instanceof Class2);
【讨论】:
cl2
不是Class2
的实例,它自己的所有属性和方法都丢失了。
@Anton,我正在使用 nest.js,我想将来自 DTO 的数据直接复制到数据库实体中。这种数据复制是使用 TypeOrm 处理的,但仅当两个类具有相同的属性时。我的情况是,我的 DTO 类比我的数据库实体类具有属性。我的问题基本上是有没有更好的方法将值从一个类复制到另一个类。到目前为止,我正在按照 Krzysztof Krzeszewski 的建议去做。
@MustanishAltamash 抱歉,我不知道nest.js。也许您可以使用此描述创建新问题并将nestjs
添加为标签。【参考方案2】:
类实例是对象,因此您可以使用普通的对象原型函数。
class MyClass
_a=0;
_b=0;
constructor(a, b)
this._a=a;
this._b=b;
set a(a)
return this._a = a;
get a()
return this._a;
set b(b)
return this._b = b;
get b()
return this._b;
const instance = new MyClass(2,3);
console.log("keys", Object.keys(instance))
console.log("values", Object.values(instance))
console.log("entries", Object.entries(instance))
instance.a = 5;
instance.b = 5;
console.log("keys", Object.keys(instance))
console.log("values", Object.values(instance))
console.log("entries", Object.entries(instance))
考虑到它只会返回实际参数,忽略setter和getter
【讨论】:
以上是关于将打字稿类转换为对象的主要内容,如果未能解决你的问题,请参考以下文章
Angular 5 / Typescript - 如何将复杂的 json 对象转换为类