如何定义仅接受要求特定泛型类型的类的TypeScript类型?
如何定义仅接受特定泛型类的TypeScript类型
你需要一个TypeScript类型,仅能接受泛型参数约束为数组类型的类B,同时排除A和C。可以通过精准匹配类B的构造函数特征来实现:
class A<T>{} class B<T extends any[]>{} class C{} // 定义仅接受类B的类型 type BClass = new <T extends any[]>(...args: any[]) => B<T>; // 合法:B符合类型要求 const validClass: BClass = B; // 报错:A的泛型参数无数组约束,不符合类型 // const invalidA: BClass = A; // 报错:C不是泛型类,不符合类型 // const invalidC: BClass = C;
说明
这个BClass类型明确要求:
- 构造函数是泛型的,且泛型参数
T必须满足extends any[]的约束 - 构造函数返回
B<T>类型的实例
这完全匹配类B的特征,而类A的泛型参数没有数组约束、类C不是泛型类,都会被TypeScript类型检查器拒绝。
如果类B有自定义构造参数,比如:
class B<T extends any[]> { constructor(private data: T) {} }
可以调整BClass类型来匹配构造参数:
type BClass = new <T extends any[]>(data: T) => B<T>;
内容的提问来源于stack exchange,提问作者ertucode
相关产品推荐
相关产品推荐

