如何让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");
逻辑说明
- 工厂函数
createFoo<T1>接收你需要显式指定的T1类型,返回一个绑定了该T1的泛型类。 - 返回的类通过构造函数的
params参数自动推导T2类型,无需手动声明。 selectT1方法的参数类型绑定为keyof T1,selectT2绑定为keyof T2,完美保留类型提示。- 整个实现没有额外的类型声明或
typeof操作,不会增加库的复杂度。
内容的提问来源于stack exchange,提问作者Mr.Trieu
相关产品推荐
相关产品推荐

