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

Tsconfig paths通配符问题:为何双通配符配置不生效?

问题原因解析

首先得明确:TypeScript的paths配置和include字段用的是完全不同的通配符规则,这就是你遇到差异的核心原因。

1. paths配置的通配符规则

paths是用来映射模块导入路径的,它的语法规则和文件系统的glob模式不一样:

  • 键名里只能用单个*作为通配符,这个*代表的是@src/之后的整个路径片段(比如你导入的@src/types/type里,*就对应types/type)。
  • 映射目标里的*会被替换成键名中*匹配到的内容。

你的初始配置为什么失败

你一开始写的:

"paths": {
  "@src/*": ["./src/**/*"]
}

当你导入@src/types/type时,TypeScript会把*替换成types/type,最终映射成./src/**/types/type——这显然不是正确的文件路径,自然找不到模块。

改成单通配符目标后:

"paths": {
  "@src/*": ["./src/*"]
}

映射结果变成./src/types/type,刚好对应实际文件路径,所以问题解决。

为什么@src/**/*作为键无效

paths的键名不支持**通配符,它的设计是用来匹配模块前缀的,比如@src/*匹配所有以@src/开头的导入路径,而**是glob模式里的递归匹配符号,在paths的键里没有意义,TypeScript无法识别这种模式,所以配置无效。

2. include字段的通配符规则

include是用来指定TypeScript需要编译的文件范围,它用的是标准的glob文件匹配模式:

  • **代表递归匹配所有子目录,所以src/**/*能正确匹配src下所有层级的文件,这和paths的规则完全无关。

总结一下:paths是模块路径映射工具,只支持单个*做前缀匹配;include是文件范围匹配,支持完整的glob规则,两者的通配符逻辑不一样,所以会出现你遇到的差异。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 19:12:55