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

TypeScript条件类型中infer U的推断规则及匹配逻辑咨询

TypeScript中infer U在模板字面量的类型推断机制

示例中的推断逻辑

先看你给出的代码:

type ExtractPrefix<T> = T extends `${infer U}abc` ? U : never;
const mystring = "helloabc"
type Result = ExtractPrefix<typeof mystring>; // Result is 'hello'

这里TypeScript会把typeof mystring(也就是字符串字面量"helloabc")和模板模式${infer U}abc做匹配:

  1. 它会先识别模式里的固定后缀abc,然后检查输入字符串的末尾是否完全匹配这个后缀——"helloabc"的最后三个字符正好是abc。
  2. 确认匹配后,TypeScript会把后缀之前的所有内容(也就是"hello")赋值给被infer声明的类型变量U,所以Result最终是'hello'。

如果把模式改成${infer U}c,输入还是"helloabc":

  1. 模式的固定后缀变成了单个字符c,输入字符串的最后一个字符正好是c。
  2. 此时c之前的所有内容("helloab")都会被赋值给U,所以结果会变成'helloab'。

infer U在模板字面量中的工作机制

infer是TypeScript条件类型里的核心关键字,用来在类型匹配过程中捕获并提取特定部分的类型信息,在模板字面量场景下的规则很明确:

  • 贪婪匹配+后缀锚定:当infer U出现在模板的前缀位置(即${infer U}固定后缀)时,TypeScript会优先锚定模式里的固定后缀部分,确认它存在于输入字符串的末尾,然后把后缀之前的所有内容全部分配给U——它会尽可能多地捕获字符,只要能保证后缀和字符串末尾完全匹配。
  • 匹配失败的情况:如果输入字符串的末尾无法匹配模式里的固定后缀(比如输入是"helloworld",模式是${infer U}abc),条件类型会进入never分支,U不会被成功推断。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 07:53:13