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

Typescript如何定义React Alert组件四选一的互斥Props类型

React Alert组件互斥属性TS类型定义方案

实现思路

通过TypeScript联合类型+映射类型,构造仅允许单个状态属性存在的互斥类型规则,未选中的其余状态属性会被显式标记为never,不符合规则时会直接触发TS校验报错。

完整实现代码

// 定义所有支持的状态类型
type MessageVariant = "info" | "success" | "warning" | "error";

// 自动生成互斥的状态属性联合类型
type VariantProps = {
  [K in MessageVariant]: Record<K, boolean> & Partial<Record<Exclude<MessageVariant, K>, never>>
}[MessageVariant];

// 组合公共属性与互斥状态属性,得到最终组件Props类型
type AlertProps = {
  id: string;
} & VariantProps;

校验效果验证

完全匹配需求规则:

  • <Alert id="abc" info /> ✅ 合法
  • <Alert id="abc" success /> ✅ 合法
  • <Alert id="abc" /> ❌ 未传入任何状态属性,TS报错
  • <Alert id="abc" info success /> ❌ 同时传入多个状态属性,TS报错

扩展说明

该方案后续新增状态类型时,仅需要在MessageVariant联合类型中添加新的状态值即可,无需修改其他类型逻辑,维护成本极低。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 22:27:02