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

如何将Object.keys(X)转为TypeScript类型?Chips组件color属性定义

问题:将React PropTypes转换为TypeScript接口的color属性类型定义

原React组件Chips.jsx中的PropTypes定义如下:

Chips.propTypes = {
    className: PropTypes.string,
    color: PropTypes.oneOf(Object.keys(Chips.colors)),
}

其中Chips.colors的类型为Record<string, string>,具体键值对如下:

{
  GRASS_GREEN: "grass_green",
  DONE_GREEN: "done-green",
  BRIGHT_GREEN: "bright-green",
}

需要将上述PropTypes转换为TypeScript的ChipsProps接口,请问接口中color属性的类型应如何定义?

interface ChipsProps{
    className?: string,
    // color?: ?? 这里应该填什么
}

解决方案

有两种实用的实现方式,可根据你的代码维护需求选择:

方式1:直接使用字面量联合类型

如果Chips.colors的取值固定不变,可以直接把允许的color值写成字面量联合类型,简单直观:

interface ChipsProps {
    className?: string;
    color?: "grass_green" | "done-green" | "bright-green";
}

方式2:动态提取类型(推荐)

如果希望color的类型能自动同步Chips.colors的取值,避免手动重复维护,可以利用TypeScript的类型推断能力:

首先需要确保Chips.colors被定义为常量类型(添加as const标记,让TypeScript保留具体的字面量值,而非宽泛的string类型):

const Chips = {
    colors: {
        GRASS_GREEN: "grass_green",
        DONE_GREEN: "done-green",
        BRIGHT_GREEN: "bright-green",
    } as const,
};

然后定义一个从Chips.colors中提取值类型的别名,再用到接口里:

// 提取Chips.colors所有值的类型
type ChipsColor = typeof Chips.colors[keyof typeof Chips.colors];

interface ChipsProps {
    className?: string;
    color?: ChipsColor;
}

后续如果Chips.colors新增或修改取值,ChipsColor类型会自动更新,无需手动修改ChipsProps接口。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 02:40:36