将打字稿类转换为对象

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 对象转换为类

打字稿类嵌套json猫

从服务器接收对象并将其转换为客户端Typescript(javascript)中的所需对象[重复]

打字稿:将 JSON 对象转换为类/接口对象

折叠打字稿类成员的轮廓