具有超级的Typescript类属性

时间:2017-11-09 19:34:42

标签: typescript

将TKO / Knockout.js重新映射回ES3或ES5以兼容IE9,  tko.binding.if/src/ifNotWith.js这里遇到错误:

class ConditionalBindingHandler extends AsyncBindingHandler {
  ...
  get shouldDisplayIf () { return !!unwrap(this.value) }
  ...
}

export class UnlessBindingHandler extends ConditionalBindingHandler {
  get shouldDisplayIf () { return !super.shouldDisplayIf }
}

在运行Typescript之后出现此错误,因为Typescript将super.shouldDisplayIf更改为super.prototype.shouldDisplayIf,这会更改this引用。

它应该做什么(获取,但设置类似)是这样的:

p = Object.getOwnPropertyDescriptor(super, 'shouldDisplayIf')
return 'get' in p ? p.get.call(this) || p.value

......但事实并非如此。这是一个已知的Typescript问题,还是我错过了什么?

我能找到的唯一相关问题是:https://github.com/Microsoft/TypeScript/issues/338

1 个答案:

答案 0 :(得分:1)

这似乎是微软的WONTFIX:

  

RyanCavanaugh于2017年11月27日发表评论

     

长话短说 - 经过五年没有这个以及人们幸存下来之后,似乎ES6的采用速度足够快,以至于那些以ES5为目标的人的狭窄窗口(而不是3代表最大的竞争,或者6代表最小的发射delta)正在接近我们此时不想接受大块辅助发射的程度。对数据开放,但它似乎不足以保证发射器发生重大变化。

https://github.com/Microsoft/TypeScript/issues/338