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

为什么TypeScript无法正确推断该场景下的泛型Context参数?

问题原因

这个问题由TypeScript的泛型推断规则和方法参数类型兼容性规则共同导致:

  • 当Parser类存在exec抽象方法时,TypeScript执行T extends Parser<any, infer C>的匹配逻辑时,会深度对比两个类的所有成员类型来推导泛型参数。你在LiteralParser的exec实现中,将第一个参数options的类型硬写为ParseOptions<any>,和父类exec的ParseOptions<Context>参数做兼容性校验时,参数位置的any会污染Context的推断结果,最终返回any。
  • 当你移除exec方法后,类中没有任何成员引用Context泛型参数,TypeScript会跳过成员兼容性校验,直接从类的泛型声明位提取参数类型,就能得到预期的unknown。
修复方案

将LiteralParser的exec方法参数类型和父类对齐即可:

exec(options: ParseOptions<Context>, internals: Internals) {
  // 原有业务逻辑
  return null;
}

修复后type A = Extr<LiteralParser<string, unknown>>的推导结果为unknown,符合预期。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.14 04:15:02