Желательно еще и с базовым контролем типов входных данных- дабы в функциях меньше проверок делать- ищу способ еще меньше повторятся. Может кто видел уже реализации такого - посмотреть что и как у других- гугление ничего что то не находит, не думаю что никто не пробовал такое писать.
P.S Ну ES6 пока во внимание не берем - рано.
Пока по быстрому накатал, что обеспечивает такое:
var sayHello=function(name,age){
return "Hello, "+name+"! Your age: "+age;
}.defaults(this, ["" , "Unknown"], ["string" , "int"], 1);
console.warn(sayHello()); //TypeError: Function expected at least 1 argument, but 0 were given
console.warn(sayHello(123)); //TypeError: Function expected [string] as 1th argument, but [int] given
console.warn(sayHello("admin")); //Hello, admin! Your age: Unknown
console.warn(sayHello("admin",1.43)); //TypeError: Function expected [int] (not necessary) as 2th argument, but [float] given
console.warn(sayHello("admin",25));// Hello, admin! Your age: 25
var func=function(date){
console.log("now",date)
}.defaults(this, ["" , "Unknown"], [Date, "string" , "int", "float", "function","array","enum","object",RegExp], 1);
func(1); //TypeError: Function expected [instance of Date] as 1th argument, but [int] given
Много чего не учтено, надобно бы сделать возможность задания несколько допустимых типов на аргумент, авто приведение типов можно было бы... Но может где уже есть реализации нечто подобного.