Когда я в прошлом разрабатывал подобные API-интерфейсы, я проверял все, что, на мой взгляд, является «основным» требованием - в вашем примере я бы проверил первые два аргумента.
Пока вы указываете разумные значения по умолчанию, для вашего пользователя должно быть довольно просто определить, что "необязательные" аргументы не указаны правильно, так как это не будет вносить никаких изменений в приложение, но все будет работать правильно .
Если API сложный, я бы посоветовал последовать совету Аарона - добавить комментарии, которые могут быть проанализированы компрессором вокруг вашей проверки, чтобы разработчики получили преимущество проверки, но могли извлечь дополнительный мертвый груз при вставке кода в производство.
EDIT:
Вот несколько примеров того, что мне нравится делать в тех случаях, когда необходима проверка. Этот частный случай довольно прост; Я, вероятно, не стал бы беспокоиться о валидации, поскольку это действительно тривиально. В зависимости от ваших потребностей, иногда попытка форсировать типы будет лучше проверки, как показано с целочисленным значением.
Предположим, что extend () - это функция, которая объединяет объекты и существуют вспомогательные функции:
var f = function(args){
args = extend({
foo: 1,
bar: function(){},
biz: 'hello'
}, args || {});
// ensure foo is an int.
args.foo = parseInt(args.foo);
//<validation>
if(!isNumeric(args.foo) || args.foo > 10 || args.foo < 0){
throw new Error('foo must be a number between 0 and 10');
}
if(!isFunction(args.bar)){
throw new Error('bar must be a valid function');
}
if(!isString(args.biz) || args.biz.length == 0){
throw new Error('biz must be a string, and cannot be empty');
}
//</validation>
};
РЕДАКТИРОВАТЬ 2:
Если вы хотите избежать распространенных орфографических ошибок, вы можете либо 1) принять и переназначить их, либо 2) проверить количество аргументов. Вариант 1 прост, вариант 2 может быть выполнен следующим образом, хотя я бы определенно реорганизовал его в собственный метод, например, Object.extendStrict () (пример кода работает с прототипом):
var args = {
ar: ''
};
var base = {
foo: 1,
bar: function(){},
biz: 'hello'
};
// save the original length
var length = Object.keys(base).length;
// extend
args = Object.extend(base, args || {});
// detect if there're any extras
if(Object.keys(args).length != length){
throw new Error('Invalid argument specified. Please check the options.')
}