我应该在构造函数中抛出异常吗

Log*_*ite 4 oop typescript

如果我有一个三角形类,如下所示:

export default class Triangle {

    sides: number[]

    constructor(...sides: number[]) {
        this.sides = sides
    }

    kind() {
        // returns type of triangle
    {
}
Run Code Online (Sandbox Code Playgroud)

如果传入构造函数的边没有创建真正的三角形,那么在创建类时(例如在构造函数中)还是在调用函数时抛出错误更好?

这个答案,它说在 Java 中没问题,我确定它在 TypeScript 中有效。我只是想知道是否有关于 OOP 和 TypeScript 的“最佳实践”。

dta*_*enc 9

在构造函数中抛出是完全可以接受的。通常最好的做法是快速失败并尽早失败。例如,在您的情况下,最好抛出构造函数,以便可以尽早将错误暴露给负责发送错误数据的代码。如果您稍后在实际使用三角形方法时抛出,则将被该异常中断的代码不会出错(他们无法采取任何不同的措施来防止异常)。这通常意味着您必须寻找创建对象的位置,以解决错误。

构造函数的主要职责之一是确保对象只能在有效状态下创建。因此,不仅在参数会导致对象处于无效状态时抛出是可以接受的,而且这正好符合构造函数首先存在的原因。