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

TypeScript如何提取对象键类型?对象属性更新报错求助

TypeScript 对象属性更新函数类型问题

场景代码

用于存储颜色值的对象:

const cardColors = {
  primaryGradientColor: "",
  secondaryGradientColor: "",
  titleTextColor: "",
  borderColor: "",
  categoryTextColor: "",
};

尝试编写的属性更新函数:

const updateColor = (colorType: typeof cardColors, color: string) => {
  cardColors[colorType] = color;
}

报错信息

Type '{ primaryGradientColor: string; secondaryGradientColor: string; titleTextColor: string; borderColor: string; categoryTextColor: string; }' cannot be used as an index type.

需求

希望直接通过cardColors对象作为函数参数的类型来源,避免单独定义类型导致的冗余维护。

解决方案

错误原因是typeof cardColors代表的是整个对象的类型,而对象索引需要的是属性名的联合类型。用keyof typeof cardColors可以获取cardColors所有属性名的联合类型,修改后的函数如下:

const updateColor = (colorType: keyof typeof cardColors, color: string) => {
  cardColors[colorType] = color;
}

keyof typeof cardColors会自动生成"primaryGradientColor" | "secondaryGradientColor" | "titleTextColor" | "borderColor" | "categoryTextColor"这个联合类型,这样colorType参数只能传入对象的合法属性名,既符合TypeScript的类型校验要求,又能在cardColors属性变更时自动同步类型,无需额外维护类型定义。

内容的提问来源于stack exchange,提问作者Raj Rohit Yadav

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 11:57:08