Ale*_*lls 7 javascript node.js typescript typescript2.0 typescript2.4
假设我们有一个接受可变数量参数的函数,我相信它被称为可变参数函数。
像这样的东西:
function foo(){
let args = Array.from(arguments).map(v => whatever);
// do something with args
}
Run Code Online (Sandbox Code Playgroud)
此函数的 TypeScript 接口可能如下所示:
interface IVariadicFn {
(...args: string[]): void,
}
Run Code Online (Sandbox Code Playgroud)
但假设我们期望可变数量的字符串,但最后一个参数我们期望是一个回调函数。
所以我们会有这样的东西:
function variadic(){
let args = Array.from(arguments)
let fn = args.pop();
let $args = args.map(v => whatever);
// do something with args
process.nextTick(function(){
fn(null, $args); // fire the callback, asynchronously
});
}
Run Code Online (Sandbox Code Playgroud)
有没有办法声明这个函数的 TypeScript 定义?
我现在能做的最好的事情就是:
type IVariadicArgs = string | Function;
export interface IBeforeFn {
(...args: IVariadicArgs[]): void;
}
Run Code Online (Sandbox Code Playgroud)
不,你不能按照你想要的那样做,但你可以将第一个参数作为函数传递,然后是最后一个参数。并且也不要使用arguments. 您可以将其替换为其余参数
interface IVariadicFn {
(func: Function, ...args: string[]): void,
}
function foo(func: Function, ...args: string[]){
let arguments = Array.from(args).map(v => whatever);
// do something with arguments
}
Run Code Online (Sandbox Code Playgroud)
你可以这样打电话
foo(yourFunc, 'asd', 'bsd', 'csd');
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3152 次 |
| 最近记录: |