具有可变数量/参数类型的函数的TypeScript声明文件

Jos*_*del 29 javascript typescript

headjs为它的API做了一些非常疯狂的JavaScript类型的东西.例如,它为函数接受任意数量的字符串(不是字符串数组).有时它会结束相同的函数调用,例如,您可以选择以函数结束它.

head.js("scripturl1", "scripturl2",...,callback);
Run Code Online (Sandbox Code Playgroud)

您也可以(同样容易)执行以下操作

head.js({scriptlabel:"scripturl1"},{scriptlabel2:"scripturl2"},...., callback);
Run Code Online (Sandbox Code Playgroud)

我的问题是我们如何在声明文件中描述HECK?我在这里都是耳朵,因为我目前的传球似乎完全错了.

nxn*_*nxn 49

TS语言规范将可变数量/扩展参数称为"休息参数".具有接受rest params的函数签名的示例接口:

interface IExample {
    fn : (...args : any[]) => any;
}

var x : IExample = {
    fn: function(...args : any[]) {
        for (var i = 0, arg; arg = args[i]; i++) {
            console.log(arg);
        }
    }
}

x.fn(1);
x.fn(1, 2);
x.fn("cat", "dog", "mouse");
Run Code Online (Sandbox Code Playgroud)

不幸的是,有一些限制."Rest Parameter"必须是函数签名中的最后一个 - 因此您将无法捕获回调参数的类型,因为它位于重复参数之后.

如果不是,你可以做这样的事情:

var fn = function(cb: Function, ...args : string[]) {
    ...
}
Run Code Online (Sandbox Code Playgroud)