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

TypeScript工厂类create方法如何根据入参返回对应类型实例

解决方案

要实现工厂方法根据入参自动推断返回类型,无需额外类型断言,可通过泛型绑定+类型映射的方式实现,修改代码如下:

步骤1:定义枚举与实例类型的映射关系

// 建立PRODUCTS枚举值到对应实例类型的映射表
type ProductTypeMap = {
  [PRODUCTS.MILK]: Milk,
  [PRODUCTS.SUGAR]: Sugar
}

步骤2:改造ProductFactory类

class ProductFactory {
  // 泛型T捕获传入的枚举值,返回值直接绑定映射表中对应的实例类型
  public static create<T extends PRODUCTS>(type: T): ProductTypeMap[T] {
    return new ProductFactory.products[type]() as ProductTypeMap[T];
  }

  private static get products() {
    // 用as const锁定映射关系,避免类型被拓宽
    return {
      [PRODUCTS.MILK]: Milk,
      [PRODUCTS.SUGAR]: Sugar,
    } as const;
  }
}

效果验证

改造后调用create方法时,TypeScript会自动根据入参推断返回值类型,无需在调用侧写类型断言:

const milk = ProductFactory.create(PRODUCTS.MILK);
// 自动推断milk为Milk类型,调用方法无报错
milk.getTankNumber();

const sugar = ProductFactory.create(PRODUCTS.SUGAR);
// 自动推断sugar为Sugar类型,可正常调用自身和混入的方法
sugar.getNumberOfCubes();
sugar.getContents();

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 13:42:01