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

如何定义仅接受要求特定泛型类型的类的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类型明确要求:

  1. 构造函数是泛型的,且泛型参数T必须满足extends any[]的约束
  2. 构造函数返回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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 08:30:53