如何快速区分具有非重叠属性的接口

时间:2019-07-09 11:09:40

标签: typescript strict type-deduction

在打字稿中,我通常有一个变量,其类型如下:

avgMyVal

当我想检查变量的形状时,我通常想做

const variable: { a: string } | { b: number };

但是在严格模式下,打字稿会在if (variable.a !== undefined) { // do stuff } else { // do stuff 处引发类型错误,因为不知道variable.a具有属性variable。为了解决这个问题,我通常像a一样投向any。但是,打字稿不会将其视为类型防护,也不会缩小(variable as any).a !== undefined的类型。

在严格模式下(不进行自定义类型保护),是否有“适当”的方式在打字稿中进行检查?

我尝试过的一些示例(不幸的是,它们还会引发类型错误):

  • variable
  • typeof variable.a !== 'undefined'

1 个答案:

答案 0 :(得分:1)

在这种情况下,最简单的区分方法是使用in类型防护:

declare const variable: { a: string } | { b: number };


if ('a' in variable) {
    variable.a
}
else {
    variable.b
}