我想在基类构造函数中使用可变参数。在派生类中也是如此。构造函数可以接收未知数量的参数,我想将它们传递给基类构造函数,以进行一些处理。我没有找到任何好的解决方案,看来这可以用 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/