javascript - TypeScript 的可变参数 - 强制执行最后一个参数

标签 javascript node.js typescript typescript2.0 typescript2.4

假设我们有一个接受可变数量参数的函数,我相信它叫做可变参数函数。

像这样:

function foo(){
 let args = Array.from(arguments).map(v => whatever);
  // do something with args
}

此函数的 TypeScript 接口(interface)可能如下所示:

interface IVariadicFn {
   (...args: string[]): void,
}

但是假设我们期望字符串的数量可变,但是最后一个参数,我们期望是一个回调函数。

所以我们会有这样的东西:

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
 });
}

有没有办法为这个函数声明一个 TypeScript 定义?

我现在能做的最好的是:

type IVariadicArgs = string | Function;

export interface IBeforeFn {
  (...args: IVariadicArgs[]): void;
}

最佳答案

不,你不能随心所欲,但你可以将第一个参数作为函数传递,然后是最后一个。也不要使用arguments。您可以将其替换为 rest参数

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
}

你可以这样调用

foo(yourFunc, 'asd', 'bsd', 'csd');

关于javascript - TypeScript 的可变参数 - 强制执行最后一个参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44670301/

相关文章:

javascript - 在 React 中通过 props 传递 ref 以防止重复常用功能

javascript - 为什么可以将 'module.exports' 作为 'exports' 访问,但不能使用 'module.id' 访问?

node.js - 2 个时间戳之间的小时差错误 (hh :mm:ss)

angular - 如何获取对象的所有属性

javascript - 猫头鹰轮播视频没有响应地调整大小

javascript - 如何: Hover the image and animating draw a line and description fade out

javascript - 如何使用 JavaScript 来回旋转图像

javascript - NodeJS 将数据从当前页面传递到另一个页面

typescript - 强制进行受歧视的联合匹配

javascript - 带有 Angular 形式输入的 ngModelOptions