告诉变量是联合类型的哪一个


interface X {
x: number
z: string
}
interface Y {
x: number
y: number
}
type XY = X | Y
function foo(arg: XY) {
if (arg.y) {
console.log(arg.x + arg.y)
}
}

我想检查 arg 是 X 还是 Y,最直观的方法似乎是检查 arg 中是否有 y,但是 TSC 不允许这样做。

正确的方法是什么?

在这种情况下,in型防护效果最好:


interface X {
x: number
z: string
}
interface Y {
x: number
y: number
}
type XY = X | Y
function foo(arg: XY) {
if ('y' in arg) {
console.log(arg.x + arg.y)
}
}

相关内容

最新更新