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

函数重载无法正确识别带参数构造函数的类类型问题求助

函数重载无法正确识别带参数构造函数的类类型问题求助

我最近在写TypeScript代码时遇到了一个类型推断的问题,卡了好一阵子,想请教一下各位:

我维护了一个Map,里面存的键值对类型比较多样——键可以是字符串、类构造函数等,值则对应不同的类型;特别的是,当键是类构造函数时,对应的值一定是这个类的实例。

为了方便从Map里取值并自动推断类型,我写了一个带重载的test函数,但发现一个奇怪的问题:当传入的类构造函数带有参数时,类型推断就失效了,具体代码如下:

const map = new Map();

function test<T>(key: new (...args: any[]) => T): T;
function test<T>(key: unknown): T
function test(key: unknown) {
  return map.get(key);
}

// 测试部分
class A {}
class B {
  constructor(public foo: string) {}
}

const aaa = test(A) // 这里能正确推断为 `A` 类型
const bbb = test(B) // 这里却错误地推断为 `unknown` 类型
const ccc = test('C') // 这个推断为 `unknown` 是正确的
const ddd = test<string>('D') // 手动指定泛型后也能正确得到 `string` 类型

我实在想不通为什么带参数的类B不能匹配第一个重载,它明明也是一个构造函数类型啊?有没有大佬能帮我分析下原因,或者给个可行的修复方案?


备注:内容来源于stack exchange,提问作者Ettapp

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.17 08:59:28