gpt4 book ai didi

javascript - Typescript 类型保护返回值存在

转载 作者:行者123 更新时间:2023-11-30 19:43:46 24 4
gpt4 key购买 nike

我有一个类的方法

isReadyToSumNumbers() {
return Boolean(
this.arithmeticOperation && this.slots["1"] && this.slots["2"]
);
}

这显然表明如果所有 3 个值都存在则返回 true。

然后我有另一个使用这个方法的方法,看起来像这样:

if (this.isReadyToSumNumbers()) {
const newValue = this.arithmeticOperation(
this.slots["1"],
this.slots["2"]
).toString();
...

但是 typescript 显示一个错误,即 this.arithmeticOperation can be undefined 因此我想到了做一个类型保护,但所有的例子都是无关紧要的,因为你可以对一个类进行类型保护 | .

我想知道如何做到这一点。

最佳答案

最好的选择是内联检查。与隐藏在方法中的检查相比,Typescript 可以更好地找出内联检查。

另一种选择是使用自定义类型保护并使用类型保护更改 this 的类型:

class Test {
isReadyToSumNumbers(): this is Test & {
arithmeticOperation: (a: number, b: number) => number;
slots: {
1: number,
2: number
}
} {
return Boolean(
this.arithmeticOperation && this.slots["1"] && this.slots["2"]
);
}
m() {
if (this.isReadyToSumNumbers()) {
const newValue = this.arithmeticOperation(
this.slots["1"],
this.slots["2"]
).toString();
}
}

arithmeticOperation?: (a: number, b: number) => number;
slots: {
1?: number,
2?: number
}
}

关于javascript - Typescript 类型保护返回值存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55135503/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com