如何同时使用@this和function.call?

时间:2018-11-20 13:11:13

标签: typescript jsdoc

给出以下JS代码,当通过bar.fun调用bar.fun.call(b, 'hi');时,如何告诉编译器我希望thisBanana的实例?

/**
 * @typedef {Object} Bar
 * @property {function(this:Foo, string):number} fun
 */


class Foo {
  constructor(){
   this.n = 1;
 };
}

class Banana extends Foo {
  constructor() {
    super();
    this.b = 2;
  };
}

const b = new Banana();

/** @type {Bar} */
const bar = {
  /**
   * @this {Banana}
   * @param {string} s
   * @return {number}
   */
  fun(s) {
    return this.n + this.b + s.length; //Property 'b' does not exist on type 'Foo'
  }
};
bar.fun.call(b,'hi');

1 个答案:

答案 0 :(得分:0)

您有两个相互矛盾的定义。在Bar的定义中,您说this的类型为Foo,后来您将bar注释为类型为Bar,但给出了一个不兼容的类型到fun。我认为,如果不注释bar并推断其类型,就会得到想要的行为。