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您的问题的答案仍然在我的答案中:“您所要求的是任何其他方式都不可能的”。