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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 09:01:02