如何在TypeScript中强制函数接收含无参构造函数的类?
强制函数参数为带无参构造函数的类(TypeScript实现)
要实现一个接收类作为参数、返回该类实例的泛型函数,同时强制要求传入的类必须具备无参构造函数(符合TypeScript规范8.3节:JS类最多只能有一个构造函数),可以通过构造签名约束参数类型:
实现代码
function acceptsAClassParameter<T>(c: new () => T): T { return new c(); } class MyClassWithNoArgsConstructor { constructor() { // 无参构造逻辑 } } class MyClassWithArgsConstructor { constructor(foo: string) { // 带参构造逻辑 } } // 合法:类具备无参构造函数 acceptsAClassParameter(MyClassWithNoArgsConstructor); // 类型错误:类的构造函数需要参数,不符合约束 acceptsAClassParameter(MyClassWithArgsConstructor);
关键说明
- 泛型
T代表传入类的实例类型,函数返回值会自动推导为T,保证类型一致性 - 参数
c的类型new () => T是构造签名,明确要求传入的类型必须是可通过new()(无参)调用生成T实例的类 - 当传入带参构造函数的类时,TypeScript会直接抛出类型错误,精准满足需求
内容的提问来源于stack exchange,提问作者zr0gravity7
相关产品推荐
相关产品推荐

