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

TypeScript能否遍历类型的键?无需实例化对象实现操作

TypeScript类型定义遍历方案

TypeScript的类型是编译时概念,编译后会被完全擦除,因此你无法直接在运行时访问Budget接口本身,Object.keys(Budget)这类写法自然无法运行。要实现无需实例化就能遍历属性键的需求,核心思路是让编译时类型和运行时值共享同一个数据源,以下是两种可行方案:

方案一:从运行时对象推导类型

先定义一个运行时存在的常量对象,再从它推导出对应的类型,这样既可以复用类型,又能直接遍历对象的属性键:

// 运行时存在的常量对象,作为类型和运行时的共同源
const budgetTemplate = {
  bills: 0,
  transportation: 0
} as const;

// 从对象推导得到与原Budget一致的类型
type Budget = typeof budgetTemplate;

// 直接遍历运行时对象的键
Object.keys(budgetTemplate).forEach(key => {
  // 这里可以执行你的逻辑,比如生成表单字段、校验规则等
  console.log(`处理属性:${key}`);
});

方案二:用字面量数组定义属性键

如果不需要对象的初始值,也可以直接定义属性键的字面量数组,再从数组推导出类型:

// 运行时存在的属性键数组
const budgetKeys = ['bills', 'transportation'] as const;

// 从数组推导类型,确保每个键对应number类型
type Budget = {
  [Key in typeof budgetKeys[number]]: number;
};

// 遍历数组即可获取所有属性键
budgetKeys.forEach(key => {
  console.log(`处理属性:${key}`);
});

注意事项

  • Object.keys()返回的类型是string[],如果需要严格的属性键类型(比如字面量类型),推荐使用方案二的字面量数组方式,它能保留键的具体类型信息,避免类型拓宽。
  • 两种方案都不需要实例化任何对象,完全基于预定义的运行时常量实现需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 06:52:07