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)
}
}
玩