Увы, для runtime аргументы проверяю самописным кодом с давних времен 2011-2012 года, тогда решения готового не нашел. Забавно, сейчас кстати занят глубоким рефакторингом этой части, с целью оформления в ES6 модуль и на гит хаб.
Для проверки аргументов, в начале тела проверяемой функции вызываю функцию проверки типов и количества обязательных аргументов, которая может бросить исключение по шаблону с указанием имени внешней функции, которое вытягивается со стека. Все типы - битовая маска, ну и по этому очень хорошо сжимается минификатором.
В коде это выглядит примерно так:
function on(event, handler, silent= false) {// some func
/* @ifdef DEBUG */
checkArgs(arguments, [TYPE_STRING | TYPE_ARRAY, TYPE_FUNCTION, TYPE_BOOLEAN], 2);
/* @endif */
//Function implementation
}
Обычно вызовы обрамляю директивой, дабы при желании для production версии Gulp+preproccess можно было собрать версию без runtime проверки аргументов.
on() //TypeError: Function [on] is expecting at least 2 arguments, but 0 were given
on(1,2,3) //TypeError: Function [on] is expecting STRING, ARRAY as 1th argument, but NUMBER, INTEGER given
Так что никто не мешает тоже написать подобное, ну либо ждать меня :)