打字稿可以 class 方法允许方法链接而不返回 'this' 吗?

Typescript can class methods allow method chaining without returning 'this'?

我制作了一个 Mycalculator class,它实现了以下 计算器接口 作为方法链接。

interface Calculator {
  add(a: number): void
  sub(a: number): void
  div(a: number): void
  mul(a: number): void
  display(decimalToDisplay: number): void
  allClear(): void
  reset(value: number): void
}


class MyCalculator implements Calculator {
  private _current: number;

  constructor(public value: number) {
    this._current = value
  }

  add(a: number): MyCalculator {
    this.current += a
    return this
  }
  sub(a: number): MyCalculator {
    this.current -= a
    return this
  }
  div(a: number): MyCalculator {
    this.current /= a
    return this
  }
  mul(a: number): MyCalculator {
    this.current *= a
    return this
  }

  get current (): number {
    return this._current
  }

  set current (result: number)  {
    this._current = result
  }

  reset (value: number) {
    this.current = value
    return this
  }

  display(decimalToDisplay: number = 2): MyCalculator {
    console.log(this.current.toFixed(decimalToDisplay))
    return this
  }

  allClear(): MyCalculator {
    this.current = 0
    return this
  }

}

// Test
new MyCalculator(3).add(5).mul(5).div(3).div(3).display() // 4.44
new MyCalculator(5).add(5).mul(5).div(5).display().allClear().reset(5).add(5).display() // 10.00, 10.00

上面的代码,我有一些疑问

感谢您的帮助!

你做对了。返回 this 是实现方法链接的正常方式。但是也有一些问题。方法应该是接口类型。

interface Calculator {
  add(a: number): Calculator
  sub(a: number): Calculator
  div(a: number): Calculator
  mul(a: number): Calculator
  display(decimalToDisplay: number): void
  allClear(): void
  reset(value: number): void
}

即使在您实现此接口时,生成的类型也是计算器。你想要的叫做多态性。该方法的调用者只需要一些计算器作为结果,他得到什么样的实现并不重要。因此,这种方法的一个示例如下所示:

class MyCalculator implements Calculator {
// ...
  add(a: number): Calculator {
    this.current += a
    return this
  }
// ....
}

但请注意,您的计算器无法正常工作。 1 + 2 * 3 与 1 + (2 * 3) 相同,但您的计算器会将其视为 (1 + 2) * 3。也许您不希望出现这种情况。