在多个函数中抛出相同TypeError的DRY方法

时间:2018-10-11 15:20:50

标签: javascript error-handling

我有一些函数,每个函数都使用一个对象作为参数。

所有这些对象都具有相似的结构,因此,我没有在每个函数中进行相同的检查,而是创建了一些检查函数:

const checkIfOptionsIsObject = options => {
    if (typeof options === 'object') {
        return true;
    } else {
        throw new TypeError('The function argument should be an object.');
    } 
}

const checkOptionsMinMax = options => {
    if (isNaN(options.min) || isNaN(options.max)) {
        throw new TypeError("'min' and 'max' should both be numbers.");
    } else if (options.min > options.max) {
        throw new Error("'min' shouldn't be greater than 'max'");
    } else {
        return true;
    }
}

这是我的使用方式:

const firstFunction = options => {
    checkIfOptionsIsObject(options);
    checkOptionsMinMax(options);

    // do some stuff
    return result;
}

const secondFunction = options => {
    checkIfOptionsIsObject(options);
    checkOptionsMinMax(options);

    // do some other stuff
    return result;
}

const thirdFunction = options => {
    checkIfOptionsIsObject(options);

    // do some stuff that doesn't use min and max
    return result;
}

这段代码有什么问题吗?

1 个答案:

答案 0 :(得分:1)

1)注意,在第一次检查 typeof object ==='object'时,如果名为object的变量实际上是一个数组,它也会为您提供'object'的类型。您可以在控制台中输入 typeof [] ==='object'来看到它,并注意它会返回true。最好使用 o!== null和&typeof o ==='object'&& Array.isArray(o)=== false; 进行对象测试。

const checkIfOptionsIsObject = options => {
    if (options !== null && typeof options === 'object' && Array.isArray(options) === false) {
        return true;
    } else {
        throw new TypeError('The function argument should be an object.');
    } 
}