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

如何使用TypeScript确保对象值与对应键匹配?

如何确保TypeScript字面量类型对象的键值严格对应?

你当前的代码里,Record<Key, ${Key}-primary>的写法会让每个键的取值变成所有${Color}-primary的联合类型,导致没法约束键和值的一一对应关系。要解决这个问题,改用**映射类型(Mapped Types)**就能实现每个键对应唯一合法值的约束。

解决方案代码

type Color = "green" | "blue" | "orange" | "red" | "purple" | "pink";

// 用映射类型为每个Color成员单独绑定对应的值类型
type ColorObject = {
  [K in Color]: `${K}-primary`;
};

// 合法定义:每个键的值严格匹配`${键名}-primary`
const COLORS: ColorObject = {
    green: "green-primary",
    blue: "blue-primary",
    orange: "orange-primary",
    red: "red-primary",
    purple: "purple-primary",
    pink: "pink-primary"
};

// 非法定义:TypeScript会直接报错
const INVALID_COLORS: ColorObject = {
    green: "red-primary", // 错误:'"red-primary"' 不能赋值给 '"green-primary"'
    blue: "blue-primary",
    // ...其他键
};

原理说明

原来的Record类型会把Key对应的${Key}-primary展开成所有可能的联合类型(比如"green-primary" | "blue-primary" | ...),这就导致每个键都能接受任意一个联合类型的值。而映射类型[K in Color]: ${K}-primary``会遍历Color的每个成员,为每个键K单独生成对应的${K}-primary类型,从而强制键和值严格对应。

扩展:支持自定义键的泛型版本

如果需要让ColorObject支持任意自定义的字符串字面量键,可以用泛型映射类型:

type ColorObject<Key extends string> = {
  [K in Key]: `${K}-primary`;
};

// 使用示例
type CustomColor = "cyan" | "yellow";
const CUSTOM_COLORS: ColorObject<CustomColor> = {
    cyan: "cyan-primary",
    yellow: "yellow-primary"
};

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 15:27:17