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

TypeScript如何仅根据type类型动态生成对应结构的空对象

结论:无法仅依靠type类型定义动态生成对应的空对象

原因说明

TypeScript 的类型系统是纯静态的编译期特性,所有类型、类型运算符(比如你用到的keyof T)只会在编译阶段参与类型校验,编译为 JavaScript 之后所有类型信息会被完全抹除,运行时根本不存在T这个类型的任何信息,自然也没办法遍历它的属性键。你预想的写法里把keyof T放到运行时的for循环中遍历是完全不可行的。


可行的替代实现

TypeScript 生态中通用的解决方案是先定义运行时可用的属性集合,再反向推导类型,保证类型和运行时结构只需要定义一次、完全对齐,实现如下:

// 1. 先定义运行时能访问到的属性列表,用as const锁定字面量类型
const fooKeys = ['go', 'start'] as const

// 2. 从属性列表反向推导出你需要的类型,不需要重复写属性
type Foo = Record<typeof fooKeys[number], string>

// 3. 编写通用生成函数
function generate<T extends string>(keys: readonly T[]): Record<T, string> {
  return Object.fromEntries(keys.map(key => [key, ''])) as Record<T, string>
}

// 4. 使用:得到的对象既符合Foo类型,值也是你要的空字符串结构
const emptyFoo = generate(fooKeys)
// emptyFoo 的值为 { go: '', start: '' },类型自动推导为Foo

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 06:15:07