次のように定義された関数があるとします。
var x = function (options, callback) { /* ... */ }
options
はプロパティfoo
とを持つ必要がありますbar
。ここで、foo
はタイプnumber
でありbar
、タイプは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
演算子があることを知っており、オプションのパラメーターを処理する方法も知っています。しかし、これらのチェックはすべて手動で行う必要があり、これは - 確かに -私たちが思いつく最善の方法ではありません。
私の質問の目標は次のとおりです。既製の関数/ライブラリ/特定のタイプの5つのパラメーター、必須、オプション、および関数/ライブラリ/チェックとあなたのためにマッピングして、これがすべてワンライナーになるようにしますか?
基本的には、次のようなものです。
var x = function (options, callback) {
verifyArgs({
options: {
foo: { type: 'number', mandatory: true },
bar: { type: 'string', mandatory: true }
},
callback: { type: 'function', mandatory: false }
});
// ...
};