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

TypeScript泛型推断结果不符合预期,Result为何是unknown而非string?

问题解答

根本原因

你的代码返回unknown是TypeScript的infer关键字在泛型参数约束位置的推断规则导致的:

  • 你代码中infer R声明在泛型参数的约束位置(<G extends infer R>),TypeScript当前类型系统不会在泛型函数的结构化匹配过程中,主动提取目标泛型函数的参数约束绑定到infer声明的类型变量,这个场景下infer R没有匹配到显式的类型定义,就会降级为默认的unknown类型。
  • 泛型函数的类型参数约束不属于函数结构化类型的校验范围:只要参数列表、返回值结构一致,即使泛型约束不同的两个函数,TypeScript也会判定为类型兼容,因此默认不会对约束部分做深度匹配提取。

可行的修正写法

如果需要提取到泛型参数的约束类型string,可以调整类型写法触发TS的实例化推断:

// 针对约束为string的场景
type GetFunctionGenerics<F> = 
  F extends <G extends string>() => void ? string : never;

// 通用提取任意约束的写法(TS 4.7及以上版本支持)
type ExtractGenericConstraint<F> = 
  F extends <G extends infer R>() => void 
    ? [R] extends [unknown] ? never : R 
    : never;

type Result = ExtractGenericConstraint<<Y extends string>() => void>;
// 此时Result类型为string

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 04:45:03