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

如何创建值为键经函数处理、支持特定键自定义的TypeScript对象?

问题解答

你的示例写法在TypeScript中不可行,因为对象字面量不支持[key]: capitalizeString(key)这种动态生成所有键值对的语法,必须通过工具函数+对象合并的方式实现需求。

可行实现方案

核心思路是先通过工具函数生成所有键对应函数处理后的基础对象,再合并自定义键的特殊值:

function capitalizeString(string: string) {
  return string[0].toUpperCase() + string.substring(1);
}

// 修正重复的字面量类型成员
type Fruits = "apple" | "orange" | "pineapple" | "pear" | "melon";

// 生成基础对象的工具函数:遍历所有键,用指定函数处理值
function createBaseObject<T extends string>(keys: T[]): { [K in T]: string } {
  const baseObj = {} as { [K in T]: string };
  for (const key of keys) {
    baseObj[key] = capitalizeString(key);
  }
  return baseObj;
}

// 定义需要自定义值的键值对
const customValues = {
  orange: "oRaNgE",
  melon: "meloN",
};

// 合并基础对象与自定义值,TypeScript会自动推导正确的类型
const fruitObject = {
  ...createBaseObject(["apple", "orange", "pineapple", "pear", "melon"]),
  ...customValues,
};

关键说明

  1. 工具函数的作用:通过遍历字面量类型的所有键,批量生成默认值,避免手动重复编写每个键的函数调用。
  2. 对象合并的优势:扩展运算符...会自动覆盖基础对象中与自定义对象重复的键,实现“特定键自定义值”的需求。
  3. 类型安全性:最终的fruitObject会被TypeScript推导为符合{ [key in Fruits]: string }的类型,既保证所有键存在,又允许特定键的值自定义。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 19:07:08