Я попытался повозиться с твоим скриптом, адаптировать его для собственных нужд. Работает нормально. Но столкнулся с небольшой неувязкой.
return func.call(
this, findArgs(args, bigList));
предполагает, что функция может быть и методом.
Но super из нее не вызовешь.
С проверками типов тоже приходится быть очень аккуратным
[
{par1: isObject, 'par2?': isArray},
{par2: isArray}
]
isObject просто как o => typeof o === 'object' не сделаешь
Надо o => typeof o === 'object' && !Array.isArray(o)
Ну и других подобных ситуаций хватало. Поэтому проверки типов иногда становятся довольно громоздкими
Меня такие коды бросают в дрожь из-за цены вызова функции по времени.
Провел тестирование
Вызывал 1 000 000 раз обычную функцию (но пустую) и делал вызов с такими проверками параметров.
С одной стороны разница по времени в 50 раз!
С другой стороны 0.6 сек на миллион вызовов.