在JavaScript类中抛出错误是否被认为是错误的做法?

在JavaScript类中抛出错误是否被认为是错误的做法?,javascript,class,exception,ecmascript-6,Javascript,Class,Exception,Ecmascript 6,我有一个如下所示的JavaScript类,需要控制输入变量的数据类型 class Store { constructor (name) { if (typeof name !== "string") throw new Error("The first argument must be a string!"); createStore(name); } // [...] } 这被认为是一种不好的做法吗?

我有一个如下所示的JavaScript类,需要控制输入变量的数据类型

class Store
{
    constructor (name)
    {
        if (typeof name !== "string")
            throw new Error("The first argument must be a string!");

        createStore(name);
    }

    // [...]
}

这被认为是一种不好的做法吗?有更好的解决方案吗?

嗯,在某些情况下,实际上最好不要抛出错误。 假设您有一个返回承诺的方法。在这种情况下,您最好拒绝它,以便使用
.catch
捕获它

class Example {
    test(name) {
        return new Promise( (resolve, reject) => {
            if (typeof name !== "string")
                reject("The first argument must be a string!")
            else
                resolve()
        })
    }
}

let ex = new Example()
ex.test(['array']).then( () => {
    console.log('We successfully passed a string!')
}).catch( err => {
    console.error(err)
})

为什么这不是一个好的做法?快速失败是好的。这取决于您对此
存储的意图。是否要中断类型检查器的整个控制流?在我看来,返回错误并让用户决定如何处理它可能是有意义的。或者,您可以查看
Flow
,这是一个在函数args:@BobbyMatson中强制执行静态类型的库-您不能轻易地从构造函数返回错误,因为构造函数返回了对象。您可以返回
null
,并要求所有代码检查该值,但异常非常适合此用途。对于在开发过程中犯错误的程序员来说,异常往往比仅仅返回一个可能没有被检查的错误代码要明显得多。99%的情况下,这种类型的错误是编程错误,而不是代码编写正确的运行时错误,因此您希望错误立即出现在开发人员面前,以便他们能够修复代码。同意!我完全没有意识到这是在构造器中——这完全有道理。作为一名开发人员,我希望
newstore(123)
会抛出一个错误