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

如何为名称相似的变量集合创建TypeScript interface?

方案1:使用TypeScript映射类型生成纯类型(无运行时代码)

如果只需要类型定义,不需要对应的运行时对象,直接用映射类型配合数字范围工具类型就能实现,和手动写全量属性的interface效果完全一致:

// 生成从1到N的数字联合类型,最高支持千级数量完全够用
type CreateRange<N extends number, Acc extends number[] = []> = Acc['length'] extends N
  ? Acc[number]
  : CreateRange<N, [...Acc, [...Acc, 0]['length']]>

// 生成1到55的数字联合类型
type VarRange = CreateRange<55>

// 生成目标类型,所有属性都是string
type VarType = {
  [K in VarRange as `Var ${K}`]: string
}

// 如果需要用interface而非type别名,直接继承即可
interface MyInterface extends VarType {}

以上方案要求TypeScript版本 >=4.1,支持模板字面量类型特性即可正常使用


方案2:同时生成运行时默认对象 + 对应类型

如果不仅需要类型定义,还要生成带默认值的实际运行时对象,可以用循环生成对象后通过typeof反向推导类型,避免类型和运行时代码重复编写:

// 复用上面的CreateRange工具类型
type CreateRange<N extends number, Acc extends number[] = []> = Acc['length'] extends N
  ? Acc[number]
  : CreateRange<N, [...Acc, [...Acc, 0]['length']]>

// 生成运行时对象,同时推导类型
const createVarObject = <N extends number>(count: N, defaultValue = '') => {
  const obj = {} as { [K in `Var ${CreateRange<N>}`]: string }
  for (let i = 1; i <= count; i++) {
    obj[`Var ${i}` as const] = defaultValue
  }
  return obj
}

// 直接生成包含55个属性的对象,默认值为空字符串
const varObj = createVarObject(55)
// 反向推导得到对应类型
type MyInterface = typeof varObj

后续如果要调整属性数量、修改属性前缀、更换属性值类型,只要对应修改模板字符串、循环参数、泛型约束即可,不用手动逐个维护属性列表。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 04:48:05