为什么在构造函数中调用super()会返回void

时间:2018-03-06 13:08:24

标签: typescript

为什么在构造函数中调用super()会返回void而不是同一类的类型?

来源:TypeScript specs 4.9.1

示例:See example here

2 个答案:

答案 0 :(得分:2)

我无法找到文档,但如果super调用返回不同的this,那么此新值将在剩余的调用中变为this。这是ES 2015规范要求的行为。如果查看生成的代码,您会看到super的返回值在构造函数的其余部分中用作this

function RoundButton(config) {
    // _this will either be the current this or whatever is returned by _super.call
    var _this = _super.call(this, config) || this;
    // refercens to this are replaces with _this
    _this.config.text = '....'; // <=== Property 'config' does not exist on type 'void'.
    return _this;
}

由于此行为已被强制执行,因此您无法按照自己的意愿使用super的返回值,因此这可能是它在类型系统中返回void的原因。

答案 1 :(得分:0)

为什么你会这样想?

它不是更简单,更具可读性吗?

var me = super(config);
me.config.text = '....'; // <=== Property 'config' does not exist on type 'void'.

super(config);
config.text = '....'; // <=== Easier?