Typescript 检查函数中的变量时满足TS编译器

Typescript 检查函数中的变量时满足TS编译器,typescript,Typescript,给出了以下示例类: export class Inference { private counter?: number; initializeCounter() { this.counter = 0; } addNumberToCounter(boost: number) { if(typeof this.counter === "number") { this.counter += boost; } } } 通过

给出了以下示例类:

export class Inference {
  private counter?: number;

  initializeCounter() {
    this.counter = 0;
  }

  addNumberToCounter(boost: number) {
    if(typeof this.counter === "number") {
      this.counter += boost;
    }
  }
}
通过选择
if(typeof this.counter==“number”)
我可以安全地将
boost
参数添加到
this.counter
。TS编译器知道
此计数器的类型
编号

如果我将选择条件信息提取到函数中,TS编译器将无法再验证要设置的计数器

  addNumberToCounter(boost: number) {
    if(this.isCounterSet()) {
      this.counter += boost;
    }
  }

  private isCounterSet() {
    return typeof this.counter === "number";
  }

如果选择结果来自单独的函数,是否有办法满足TS编译器的要求?

您可以将
isCounterSet()
更改为一个函数。这可以通过以下方式完成:

addNumberToCounter(boost: number) {
  if(this.isCounterSet(this.counter)) {
    this.counter += boost;
  }
}

private isCounterSet(counter?: number): counter is number {
  return typeof this.counter === "number";
}

这要求您更改
isCounterSet
,以便将
This.counter
的值作为参数传入。您所要求的是其他任何方式都无法实现的。

谢谢您的回复。我知道这个选项,但这不是我想要的。@scipper您的问题的答案仍然在我的答案中:“您所要求的是任何其他方式都不可能的”。