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

如何将字符串参数作为TypeScript返回对象的模板字面量键类型?

解决方案

你可以通过泛型结合模板字面量类型实现这个需求,核心是让TypeScript保留输入name的字面量类型信息,再通过Capitalize工具类型处理后生成属性键:

function createTypedObject<Name extends string>(name: Name): {
  [K in `use${Capitalize<Name>}`]: any;
} {
  return {
    [`use${name.charAt(0).toUpperCase() + name.substring(1)}`]: "any"
  } as any;
}

关键说明

  • 泛型Name extends string用来捕获输入name的具体字面量类型(比如传入"foo"时,Name就是"foo")。
  • 模板字面量类型`use${Capitalize<Name>}`会把Name的首字母大写后和use拼接,生成对应的属性键类型(比如Name是"foo"时,键类型就是"useFoo")。
  • 返回值的as any类型断言是因为TypeScript无法在编译时完全对齐动态生成的键和静态类型的对应关系,属于安全的兜底处理。

效果验证

当传入具体字符串字面量时,TypeScript会精准推断返回对象的类型:

const obj = createTypedObject("bar");
// obj的类型为 { useBar: any }
obj.useBar; // 类型检查通过
obj.useFoo; // 类型报错,符合预期

如果传入的是普通string类型(非字面量),返回类型会是包含所有可能useXXX格式键的索引签名,逻辑自洽:

const dynamicName = "test";
const obj2 = createTypedObject(dynamicName);
// obj2的类型为 { [x: `use${Capitalize<string>}`]: any }

内容的提问来源于stack exchange,提问作者Joscha Götzer

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 19:15:23