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

如何让TypeScript类从构造函数参数自动推导泛型T2类型?

解决方案:通过工厂函数实现部分泛型指定与自动推导

TypeScript类本身不支持“显式指定部分泛型参数、其余自动推导”的语法,但可以通过工厂函数封装,既满足你仅指定T1的需求,又让T2从构造函数的params参数自动推导,同时保证两个方法的类型提示正常工作,且不会额外增加库的复杂度。

实现代码

function createFoo<T1>() {
  return class Foo<T2> {
    constructor(private params: T2) {}

    selectT1(key: keyof T1): void {
      // 业务逻辑实现
    }

    selectT2(key: keyof T2): void {
      // 业务逻辑实现
    }
  };
}

使用示例

// 第一步:显式指定T1类型,得到绑定该T1的专属Foo类
const UserFoo = createFoo<{ id: number; name: string }>();

// 第二步:传入params,T2自动从参数类型推导
const fooInstance = new UserFoo({ age: 25, email: "user@example.com" });

// selectT1会自动提示T1的键:"id" | "name"
fooInstance.selectT1("id");

// selectT2会自动提示params的键:"age" | "email"
fooInstance.selectT2("age");

逻辑说明

  1. 工厂函数createFoo<T1>接收你需要显式指定的T1类型,返回一个绑定了该T1的泛型类。
  2. 返回的类通过构造函数的params参数自动推导T2类型,无需手动声明。
  3. selectT1方法的参数类型绑定为keyof T1,selectT2绑定为keyof T2,完美保留类型提示。
  4. 整个实现没有额外的类型声明或typeof操作,不会增加库的复杂度。

内容的提问来源于stack exchange,提问作者Mr.Trieu

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 10:13:24