首页 > 解决方案 > 使用 Object.assign 在 Typescript 中重载构造函数

问题描述

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

实际上有什么理由不使用空构造函数然后像这样实例化类吗?

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

标签: typescriptoop

解决方案


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

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

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


推荐阅读