typescript - 如何将可变参数传递给基类

标签 typescript

我想在基类构造函数中使用可变参数。在派生类中也是如此。构造函数可以接收未知数量的参数,我想将它们传递给基类构造函数,以进行一些处理。我没有找到任何好的解决方案,看来这可以用 spread operator 解决。 ,这显然不存在于 TypeScript 中。会开发in version 1.5 (我说得对吗?):

class TSBase{
  constructor(...args: any[]){
    //do stuff with args
  }
}

class TSSomeController extends TSBase{
  constructor(...args: any[]){         
    //let base do some stuff
    //super(...args); //this doesn't work, but it would be cool... :)
  }
}

在 TypeScript 中最好的方法是什么?我可以使用类似 super.prototype.apply 的东西吗?

最佳答案

如您所知,传播运算符尚不可用。

编辑 - 旁注: 实际上,它现在可以在 TypeScript 1.5 中使用。只需执行 super(...args);

至于在 TypeScript 1.5 之前执行此操作的最佳方法...它确实取决于,但这是一个不涉及更改任何派生类并保持您想要执行的操作的解决方案:

class TSBase {
  constructor(...args: any[]) {
    if (this.constructor != TSBase && args.length === 1 && args[0] instanceof Array) {
      args = args[0];
    }

    // work with args here... for example:
    args.forEach((val) => console.log(val));
  }
}

class TSSomeController extends TSBase{
  constructor(...args: any[]){         
    super(args);
  }
}

new TSBase(3, 4);                 // 3, 4
new TSBase([3, 4]);               // Array[2]
new TSSomeController(3, 4);       // 3, 4
new TSSomeController([3, 4]);     // Array[2]
new TSSomeController([3, 4], 5);  // Array[2], 5

基本上,您可以在基本构造函数中添加一个检查,使 args 数组仅在从派生类传入时等于第一个元素,当有一个参数时,并且当该参数时是一个数组。

关于typescript - 如何将可变参数传递给基类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27709097/

相关文章:

typescript - tsconfig.json 中的 gulp-typescript 和 outFile 选项

typescript - 如何向 typeORM 实体添加辅助方法?

javascript - 如何在 ionic 2/Angular2/typescript 中声明多个变量?

javascript - 如何根据使用 Angular2 发出的 post 请求的响应呈现输出

angular - 无法在 Angular 构造函数或 OnInit 中放置断点

javascript - 当对象来自 Web API 时如何避免将日期转换为字符串

angular - 如何从 Angular 中的 Forms 遍历控件数组属性

javascript - 使用 Typescript 声明字符串结构的最佳方法?

Angular2 - 如何链接异步 http 请求并在失败时停止

typescript - 如何将 plotly.js 导入 TypeScript?