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

如何强制类泛型必须显式传入,禁止自动推导?

解决TypeScript泛型必须显式传入的问题

要实现让new Test({a: 1})这类隐式推导泛型的写法报错,强制必须显式指定泛型参数,我们可以利用TypeScript的泛型默认值和条件类型来阻断自动推导逻辑,具体方案如下:

实现代码

class Test<P = never> {
  constructor(data: P extends never ? never : P) {}
}

效果验证

  • 错误写法(会触发类型检查失败):
    // 报错:类型"{ a: number; }"的参数不能赋给类型"never"的参数。
    new Test({ a: 1 });
    
  • 正确写法(符合要求,正常通过检查):
    new Test<{a: number}>({ a: 1 });
    

原理说明

这里的核心思路是:

  1. 给泛型P设置默认类型never,当用户不显式指定泛型时,P会被自动设为never。
  2. 通过条件类型P extends never ? never : P,构造函数的参数类型会根据P是否为默认的never来动态变化:
    • 若未显式指定P,参数类型为never,而普通对象字面量无法赋值给never,直接触发类型错误。
    • 若显式指定了P,参数类型就会变成指定的P类型,此时传入匹配的参数就能正常通过检查。

这种方案既满足了强制显式传泛型的需求,又不会影响正常显式传参后的类型校验,是比较简洁的实现方式。

内容的提问来源于stack exchange,提问作者aweiu

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 06:49:40