验证传递给方法/函数的参数数量

时间:2017-11-04 20:09:11

标签: javascript typescript

我知道在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 argumentall three arguments,并且两个参数无效。你如何在TypeScript中定义它,以便在尝试使用两个参数时抛出错误?

我尝试制作这样的界面:

interface MyObject {
  myFunciton: (arg1: string) => this
  myFunciton: (arg1: string, arg2: number, arg3: number) => this
}

然而,这给出了错误:

  

重复的标识符' myFunction'。

1 个答案:

答案 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;
}