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

如何将PropTypes.oneOf(Object.values(常量))转换为Typescript类型

解决方案

你可以基于TS的类型查询和索引访问能力,直接从已有的常量对象推导值的联合类型,写法如下:

type Props = {
  placement: typeof TOOLTIP_PLACEMENTS[keyof typeof TOOLTIP_PLACEMENTS]
}

代码逻辑说明

  • 先用typeof TOOLTIP_PLACEMENTS获取常量对象本身的TS类型,由于你用了Object.freeze冻结对象,TS会自动把属性值推导为精确的字符串字面量类型,而不是宽泛的string类型
  • 再用keyof typeof TOOLTIP_PLACEMENTS获取该对象所有键的联合类型,也就是'TOP' | 'BOTTOM' | 'LEFT' | 'RIGHT'
  • 最后通过索引访问的方式,拿到所有键对应的值的联合类型,最终推导结果为'top' | 'bottom' | 'left' | 'right',和你原有PropTypes定义的校验规则完全匹配

如果需要在多处使用这个放置位置类型,可以单独抽离定义:

type TooltipPlacement = typeof TOOLTIP_PLACEMENTS[keyof typeof TOOLTIP_PLACEMENTS]

type Props = {
  placement: TooltipPlacement
}

这种写法的优势是后续你修改TOOLTIP_PLACEMENTS的常量值时,对应的类型会自动同步更新,不需要手动维护类型定义,完全避免硬编码字符串字面量的冗余问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 00:18:03