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

如何为指定结构的输出对象动态创建TypeScript类型?

能否实现给每个键生成带键名后缀的字段类型?

当然可以实现,TypeScript的模板字面量类型(Template Literal Types)正好能满足这个需求,它支持在类型层面拼接字符串,以此生成带特定后缀的属性名。

实现代码示例

// 输入对象示例
const input = {
  "test": 1,
  "test2": "2",
}

// 生成目标类型的工具类型
type KeySuffixType<T extends Record<string, string | number | object | unknown[]>> = {
  [K in keyof T]: {
    [P in `${string & K}Data`]: T[K];
  } & {
    [P in `${string & K}IsError`]: boolean;
  }
}

// 验证类型正确性
const output: KeySuffixType<typeof input> = {
  test: {
    "testData": 1,
    "testIsError": false,
  },
  test2: {
    "test2Data": "2",
    "test2IsError": false,
  }
}

关键特性说明

  • 模板字面量类型:${string & K}Data 和 ${string & K}IsError 会将输入对象的每个键名K与固定后缀拼接,动态生成对应的属性名
  • 交叉类型(&):将两个包含单个属性的对象类型合并,确保每个键对应的对象同时拥有${key}Data和${key}IsError两个字段
  • 类型约束:T extends Record<string, string | number | object | unknown[]> 保证输入类型符合你最初定义的结构范围

这个实现完全贴合你最初的需求,类型推导也精准无误:testData会被推断为number类型,test2Data则为string类型。对比你提到的统一data/isError字段的简洁方案,它完全保留了原键名后缀的结构。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 10:07:18