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

TypeScript中未指定泛型:直接调用与空合并的类型推断差异

变量a和b类型差异的原因

核心在于TypeScript泛型推断的上下文关联性:

  1. defEmpty的类型推断
    当你在函数外部调用empty()时,TypeScript没有任何额外的上下文信息来推断泛型T的具体类型,所以会默认将T推断为unknown,因此defEmpty的类型是unknown[]。

  2. 变量a的类型计算
    a = abc ?? defEmpty中,abc的类型是number[] | null,而defEmpty是unknown[]。由于unknown是TypeScript的顶级类型,number[]是它的子类型,所以两者的联合结果类型是unknown[]。

  3. 变量b的类型推断
    b = abc ?? empty()中,empty()是在??操作符的右侧调用的。TypeScript会利用??左侧的类型(number[] | null)作为上下文,自动推断泛型T为number,这样empty()返回的类型就是number[],和左侧的number[]兼容,最终b的类型就是number[]。

简单总结:单独调用empty()时没有上下文约束,只能使用默认的unknown;但在??右侧调用时,TypeScript会根据左侧的目标类型自动适配泛型参数。

内容的提问来源于stack exchange,提问作者edA-qa mort-ora-y

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 03:33:31