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

如何将枚举类型纳入React组件的PropTypes校验?

解决TypeScript枚举在React PropTypes中的校验问题

你的问题出在:TypeScript的数字枚举编译后是一个双向映射的对象(同时包含键→值和值→键的映射),而PropTypes.oneOf()需要接收的是有效值组成的数组,直接传入枚举对象自然无法生效。

针对你的数字枚举场景,修改方式如下:

先提取枚举的有效数值,再传入oneOf:

SizeSelector.propTypes = {
  size: PropTypes.oneOf(
    Object.values(choices).filter(v => typeof v === 'number')
  )
}

如果是字符串枚举的场景(更推荐用于明确语义):

如果定义的是字符串枚举:

enum choices {
  wide = 'wide',
  medium = 'medium',
  small = 'small'
}

此时Object.values(choices)直接返回字符串有效值数组,可以直接使用:

SizeSelector.propTypes = {
  size: PropTypes.oneOf(Object.values(choices))
}

补充说明:

因为你已经用TypeScript做了编译时的类型校验,PropTypes属于运行时额外校验,如果项目对运行时校验要求不高,也可以考虑只保留TypeScript的类型定义即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 21:45:33