首页 > 解决方案 > 告诉变量是联合类型中的哪一种

问题描述

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 不允许这样做。

什么是正确的方法?

标签: typescript

解决方案


在这种情况下,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)
    }
}


推荐阅读