Typescript中带有Object.assign的构造方法重载

时间:2019-12-19 09:07:49

标签: typescript oop

我看到很多有关Typescript的构造函数重载技巧的问题。

实际上是否有任何理由不使用空的构造函数,然后实例化此类?

const obj = Object.assign(new MyClass(), {a: 'check', b: 'mate'})

1 个答案:

答案 0 :(得分:0)

这违反了一个对象负责维护其自身内部状态的原则,并且它紧密地将创建MyClass对象的代码与该状态的类表示形式耦合(以哪种属性保存哪些数据的形式)

在构造函数中可能要做的一件事是验证输入。例如,如果矩形的宽度或高度为负,则抛出错误。您的代码不允许这样做,因为直到构造函数返回后才分配属性,因此构造函数看不到它们。

您可能想做的另一件事是添加一些带有预计算值的额外字段。例如,如果一个类表示一个具有xyz坐标的向量,并且您有一个length()方法来计算长度,则可能需要对其进行重构构造函数计算一次长度,并将其存储在_length属性中,然后length()方法返回该属性。您的代码不允许进行这种重构,因为构造函数将无法看到xyz值。