我知道在JavaScript中,重载的最佳方法是使用arguments
这样的对象:
function myFunciton(arg1, arg2, arg3){
switch(arguments.length) {
case 3:
// Do something with 3 args
break;
case 2:
// Do something with 2 args
break;
case 1:
// Do something with 1 args
break;
default:
// Do something with no args
break;
}
}
使用上面的示例,假设您需要传递1 argument
或all three arguments
,并且两个参数无效。你如何在TypeScript中定义它,以便在尝试使用两个参数时抛出错误?
我尝试制作这样的界面:
interface MyObject {
myFunciton: (arg1: string) => this
myFunciton: (arg1: string, arg2: number, arg3: number) => this
}
然而,这给出了错误:
重复的标识符' myFunction'。
答案 0 :(得分:2)
在TypeScript中,您可以通过提供多种函数类型来定义overloads on functions。
您的功能将写为:
function myFunction(arg1);
function myFunction(arg1, arg2, arg3);
function myFunction(arg1, arg2?, arg3?) {
switch(arguments.length) {
case 3:
// Do something with 3 args
break;
case 2:
// Do something with 2 args (TS won't allow this one)
break;
case 1:
// Do something with 1 args
break;
default:
// Do something with no args (TS won't allow this one)
break;
}
}
您的界面将被写为:
interface MyObject {
myFunction(arg1: string): this;
myFunction(arg1: string, arg2: number, arg3: number): this;
}