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

如何定义符合特定约束的TypeScript Item联合类型?

如何在TypeScript中定义互斥的Item类型

你的问题在于原有的联合类型没有对两个结构做互斥约束——TypeScript判断联合类型的赋值时,只要对象能匹配其中任意一个成员的结构就会通过。{title: string; content: string}可以匹配{content: string}(额外属性不会被阻止),所以不会触发错误。

要实现你需要的约束,必须让两个类型互斥:当存在title时,content必须是string[];当content是string时,不能有title属性。可以通过给第二个类型添加title?: never来实现:

type Item = 
  { title: string; content: string[] } 
  | { content: string; title?: never };

// 合法情况
const validItem1: Item = { title: "Title", content: ["Content 1", "Content 2"] };
const validItem2: Item = { content: "Single Content" };

// 非法情况(会触发TypeScript错误,符合预期)
const invalidItem: Item = { title: "Title", content: "Content" };

原理说明

title?: never的作用是:当这个类型被匹配时,title属性要么不存在,要么只能是never类型(即无法被赋值)。这样当你尝试给content: string的结构添加title: string时,string类型与never类型不兼容,TypeScript就会报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 19:27:16