如何使用`... args`将许多参数传递给基类?

时间:2016-11-03 18:11:20

标签: typescript

我正在使用Typescript 2.0

class Parent {
    constructor(a, b, c, d, e) {
    }
}

class Child extends Parent {
    constructor(...args) {
        super(...args); // this currently fails
    }
}

以下看起来很麻烦。

class Child extends Parent {
    constructor(a, b, c, d, e) {
        super(a, b, c, d, e);
    }
}

1 个答案:

答案 0 :(得分:2)

事情是,编译的js很好:

6d4cd6e5cdd9

我不确定你为什么会收到这个错误 试试opening an issue,如果您这样做,请将该链接发布为评论。

修改

似乎是这个问题:Support spread operator for arrays and tuples in function calls也是这个问题。

使用常规功能,您可以将它们转换为任何:

var Parent = (function () {
    function Parent(a, b, c, d, e) {
        console.log(a, b, c, d, e);
    }
    return Parent;
}());
var Child = (function (_super) {
    __extends(Child, _super);
    function Child() {
        var args = [];
        for (var _i = 0; _i < arguments.length; _i++) {
            args[_i - 0] = arguments[_i];
        }
        _super.apply(this, args);
    }
    return Child;
}(Parent));

但是你不能通过function fn(a, b) { } let a = [1, 2]; fn(...a); // Error: Supplied parameters do not match any signature of call target (fn as any)(...a); // no error 电话来做到这一点 你可以说编译器在守护你,super的内容可能会有...args构造函数所期望的更少或更多的值,但是这样也不行:

Parent

由于:

  

rest参数必须是数组类型