【发布时间】:2019-07-09 11:09:40
【问题描述】:
在打字稿中,我通常有一个类型如下的变量:
const variable: { a: string } | { b: number };
当我想检查变量的形状时,我通常想做
if (variable.a !== undefined) {
// do stuff
}
else {
// do stuff
但是在严格模式下,typescript 会在 variable.a 处引发类型错误,因为不知道 variable 具有属性 a。为了解决这个问题,我通常会转换为any,例如(variable as any).a !== undefined。但是 typescript 不会将其视为类型保护,也不会缩小 variable 的类型。
在严格模式下(不制作自定义类型保护)是否有“正确”的方式在 typescript 中执行此检查?
我尝试过的一些示例(不幸的是,它们也会引发类型错误):
typeof variable.a !== 'undefined'variable.hasOwnProperty('a')
【问题讨论】:
-
@tehhowch 虽然我的问题的答案可能与该问题的答案相同,但这两个问题引入了非常不同的场景。在那个问题中,发帖者已经知道他们想要做什么(在这种情况下,使用
in运算符)。在这个问题中,发帖人不知道他们想要做什么。我认为寻找 this 问题答案的人不会找到 that 问题(我当然没有)。
标签: typescript strict type-deduction