You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

判别式联合的交集行为异常,如何定义类型C使所有示例合法?

解决方案:重新定义联合类型覆盖所有合法场景

原类型C = A & B的交集仅包含A、B各自联合分支的交叉组合,而{a: boolean}、{b: boolean}这类赋值无法匹配任何交叉分支——因为A的分支中a只能是true或可选的false,B的分支中b只能是true或可选的false,均不包含boolean类型的属性值,因此触发TypeScript错误。

要让所有示例赋值合法,需重新定义C为覆盖所有合法场景的联合类型,明确将需要允许的{a: boolean}、{b: boolean}等情况纳入分支:

type A = { a: true } | { a?: false }
type B = { b: true } | { b?: false }

type C = 
  | {}
  | { a: true }
  | { b: false }
  | { a: true; b: false }
  | { a: boolean }
  | { b: boolean }
  | { a: boolean; b: boolean };

// 所有赋值均合法
let c: C = {}

c = {
    a: true,
}

c = {
    b: false,
}

c = {
    a: true as boolean,
    b: false as boolean
}

c = {
    a: true as boolean,
}

c = {
    b: false as boolean
}

每个赋值对应的匹配分支:

  • {} → 匹配{}分支
  • {a: true} → 匹配{a: true}分支
  • {b: false} → 匹配{b: false}分支
  • {a: true as boolean, b: false as boolean} → 匹配{a: boolean; b: boolean}分支
  • {a: true as boolean} → 匹配{a: boolean}分支
  • {b: false as boolean} → 匹配{b: boolean}分支

内容的提问来源于stack exchange,提问作者Dzmitry Shuhayeu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 02:05:18