假设我定义了一个函数,例如:
var x = function (options, callback) { /* ... */ }
options
需要有属性foo
and bar
, wherefoo
应该是 type number
, andbar
是 type string
。
因此,基本上,我可以使用以下代码进行检查:
var x = function (options, callback) {
if (!options) { throw new Error('options is missing.'); }
if (!options.foo) { throw new Error('foo is missing.'); }
if (!options.bar) { throw new Error('bar is missing.'); }
if (!callback) { throw new Error('callback is missing.'); }
// ...
}
但这仅检查是否存在,尚未检查正确的类型。当然,我可以添加进一步的检查,但这很快就会变得冗长,而且可读性不太好。一旦我们开始谈论可选参数,它就会变得一团糟,参数转换等等……</p>
处理这个问题的最佳方法是什么(假设你想检查它)?
更新
澄清我的问题:我知道有typeof
运算符,我也知道如何处理可选参数。但是我必须手动进行所有这些检查,而这——当然——不是我们能想到的最好的。
我的问题的目标是:是否有一个现成的函数/库/任何你可以告诉你期望五个特定类型的参数,一些是强制性的,一些是可选的,以及函数/库/无论做什么检查和为您绘制地图,以便将这一切归结为单线?
基本上,例如:
var x = function (options, callback) {
verifyArgs({
options: {
foo: { type: 'number', mandatory: true },
bar: { type: 'string', mandatory: true }
},
callback: { type: 'function', mandatory: false }
});
// ...
};