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

TypeScript:前置泛型存在时字符串字面量泛型无法收窄?求解决方案

问题原因

当显式指定部分泛型参数(如goo<{}>中的{})时,TypeScript会对未指定的泛型参数直接使用其默认值(此处K的默认值为string),不再根据传入的实参进行类型推断。这是TypeScript泛型推断的既定行为,并非无法实现需求,只需调整写法即可。

解决办法1:使用泛型占位符(TypeScript 4.7+)

将需要自动推断的泛型参数前置,显式指定的参数后置,并用_作为占位符让TypeScript自动推断前置参数:

const goo = <K extends string = string, T extends Record<string, any>>(arg: K): T => ({} as T)

goo<_, {}>('my string'); // const goo: <"my string", {}>(arg: "my string") => {}

解决办法2:柯里化拆分泛型参数

通过柯里化将泛型参数拆分为两个函数,先固定需要显式指定的T类型,再让第二个函数根据传入的参数推断K的字面量类型:

const goo = <T extends Record<string, any>>() => 
  <K extends string = string>(arg: K): T => ({} as T)

goo<{}>()('my string'); // const goo: <{}>() => <"my string">(arg: "my string") => {}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 13:01:04