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

TypeScript如何动态创建类实例?规避if/else或switch方案

实现方案:使用类注册表映射

核心思路是通过类注册表对象关联类名与对应类的构造函数,直接通过类名查表获取构造函数并创建实例,完全避免条件分支判断,同时借助TypeScript的类型系统保证参数与构造函数的匹配性。

步骤示例

  1. 先定义你的两个类(构造参数不同):
class First {
  constructor(public name: string) {}
}

class Second {
  constructor(public age: number, public address: string) {}
}
  1. 创建类注册表,将类名与类本身做映射:
// 使用as const确保类型为字面量,保留精确的类名和构造函数类型
const classRegistry = {
  First,
  Second
} as const;
  1. 实现类型安全的create函数:
// 提取合法的类名类型
type ValidClassName = keyof typeof classRegistry;

function create<T extends ValidClassName>(
  className: T,
  ...args: ConstructorParameters<typeof classRegistry[T]>
): InstanceType<typeof classRegistry[T]> {
  const TargetClass = classRegistry[className];
  return new TargetClass(...args);
}
  1. 调用示例:
// 参数类型不匹配会直接在编译期报错
const firstIns = create('First', '张三');
const secondIns = create('Second', 28, '北京市朝阳区');

优势说明

  • 无分支判断:新增类时只需要往classRegistry里添加新的键值对,无需修改create函数逻辑
  • 类型安全:TypeScript会自动校验传入的参数是否与目标类的构造函数匹配,编译期就能发现错误
  • 扩展性强:无论后续新增多少类,都能通过统一的方式处理

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 00:36:27