在 typescript 中,我通常有一个类型如下的变量:
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')
最佳答案
在这种情况下,最简单的区分方法是 in
类型保护:
declare const variable: { a: string } | { b: number };
if ('a' in variable) {
variable.a
}
else {
variable.b
}
关于typescript - 如何快速区分具有非重叠属性的接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56951240/