代码之家  ›  专栏  ›  技术社区  ›  jayatubi

如何对typescript联合类型中的可选字段进行条件检查?

  •  0
  • jayatubi  · 技术社区  · 1 年前

    我有几种类似的类型,比如 { value: number, type: 'number' } 我打算把它们分为工会类型,比如:

    type UnionType1 = { value: number, type: 'number' } | { value: string, type: 'string' }
    type Pass1 = UnionType1 extends { value: any, type: any } ? true : false
    //   ^? type Pass1 = true
    

    但是,如果其中一个并集类型具有可选字段,则条件检查将失败:

    type UnionType2 = { value: number, type: 'number' } | { value?: string, type: 'string' }
    type Pass2 = UnionType2 extends { value: any, type: any } ? true : false
    //   ^? type Pass2 = false
    

    我想要 Pass2 也将成为 true ,而不更改UnionType2,如果但我不知道如何更改。

    Playground

    1 回复  |  直到 1 年前
        1
  •  1
  •   John    1 年前

    你可以简单地 value 属性也是可选的:

    type UnionType2 = { value: number, type: 'number' } | { value?: string, type: 'string' }
    type Pass2 = UnionType2 extends { value?: any, type: any } ? true : false