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

Typescript联合与交叉类型组合场景下类型校验未正常报错问题

TypeScript 联合类型校验不生效问题原因及解决方案

问题根因

TypeScript 采用结构类型系统,针对联合类型的多余属性校验有特殊规则:
你定义的Selector是包含TemporalSelector的联合类型,TemporalSelector仅要求存在id: number属性即可符合类型要求。用例e1 = { id: 0, value: "" }满足TemporalSelector的所有必填属性,且value属于联合类型中ValueSelector分支的合法属性,因此不会触发多余属性校验,这就是e1没有报错的核心原因。

修复方案

如果要实现你期望的「只能是纯ValueSelector、纯TemporalSelector、或是同时满足两者的交叉类型,不能出现缺属性的混合情况」,可以通过显式定义三个互斥的联合分支实现:

type Selector = 
  // 仅符合TemporalSelector的分支
  | { id: number; type?: never; value?: never }
  // 仅符合ValueSelector的分支
  | { type: "id" | "value_string"; value: string; id?: never }
  // 同时符合两个类型的交叉分支
  | { id: number; type: "id" | "value_string"; value: string }

修改后你原本期望报错的e1就会正常触发类型错误,且所有合法用例的校验逻辑不受影响。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 09:18:00