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

TypeScript类型推断不完整引发TS2322错误,是否属于Bug?

这不是TypeScript的Bug,是泛型推断的限制问题

问题根源

你定义的flatListResults函数将E作为顶层泛型参数,让它继承Environment<P, R, Rs>,但TypeScript的泛型推断系统无法从E反向推导出P、R、Rs的具体类型,最终将未推断出的P默认设为unknown,导致赋值时出现TS2322错误。

修复方案

有两种可行的解决方式:

方式一:显式指定泛型参数

调用函数时手动传入具体的类型参数,明确告知TypeScriptP、R、Rs的类型:

for (const [p, r] of flatListResults<Environment<number, string, [number, string[]]>, number, string, [number, string[]]>(env, results)) {
    let q: number = p; // 类型检查通过
}

方式二:简化泛型函数定义

去掉多余的E泛型参数,直接用Environment<P, R, Rs>作为参数类型,让TypeScript从输入参数直接推断类型:

function* flatListResults<P, R, Rs>(
    env: Environment<P, R, Rs>, results: Rs): Iterable<[P, R]>
{
    for (const [p, rs] of env.listResults(results)) {
        for (const r of rs) {
            yield [p, r];
        }
    }
}

修改后调用flatListResults(env, results)时,TypeScript会自动推断出P=number、R=string、Rs=[number, string[]],类型错误即可解决。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 16:55:05