【问题标题】:Covert typescript class to object将打字稿类转换为对象
【发布时间】:2020-12-15 04:34:14
【问题描述】:

我有一个打字稿类 A 和另一个类 B 具有类 A 的所有属性。有没有办法将所有值从类 B 复制到类 A。或者有没有办法将类 A 的所有属性作为对象.

【问题讨论】:

  • 您需要将变量a: ClassA中的所有字段值复制到另一个变量b:ClassB中?

标签: javascript typescript nestjs


【解决方案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

【讨论】:

    猜你喜欢
    • 2018-10-10
    • 1970-01-01
    • 2021-07-24
    • 1970-01-01
    • 2020-11-21
    • 2017-03-22
    • 2021-06-03
    • 2017-02-11
    • 1970-01-01
    相关资源
    最近更新 更多