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

如何在TSX中使用Object.freeze定义的枚举值作为组件Props类型

解决方案

1. 提取枚举值的联合类型

可以通过typeof DaysOfWeek[keyof typeof DaysOfWeek]获取枚举对象中所有值的联合类型,给它定义类型别名后就能直接用于props的类型限定:

const DaysOfWeek = Object.freeze({
  SUNDAY: "str1",
  MONDAY: "str2"
});

// 提取所有枚举值的联合类型
type DayOfWeekValue = typeof DaysOfWeek[keyof typeof DaysOfWeek];

// 在组件props中使用该类型
const MyComp = (props: { dayOfWeek: DayOfWeekValue }) => {
  if (props.dayOfWeek === DaysOfWeek.SUNDAY) {
    // 业务逻辑处理
  }
  return <div>{props.dayOfWeek}</div>;
};

此时TypeScript会强制校验dayOfWeek只能是"str1"或"str2",传入其他字符串会直接触发类型错误,实现强校验。

2. 直接在props中使用类型表达式

如果不想额外定义类型别名,也可以直接把类型表达式写在props的类型定义里:

const MyComp = (props: { dayOfWeek: typeof DaysOfWeek[keyof typeof DaysOfWeek] }) => {
  // 组件逻辑代码
};

3. 可选方案:改用TypeScript原生枚举

如果项目本身基于TypeScript开发,直接使用原生枚举会更简洁:

enum DaysOfWeek {
  SUNDAY = "str1",
  MONDAY = "str2"
}

const MyComp = (props: { dayOfWeek: DaysOfWeek }) => {
  if (props.dayOfWeek === DaysOfWeek.SUNDAY) {
    // 业务逻辑处理
  }
};

这种方式下,dayOfWeek会被自动限定为枚举的有效值,同时保留枚举的键值映射能力。

内容的提问来源于stack exchange,提问作者gene b.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 08:20:00