TypeScript找不到tsconfig.json?配置target esnext仍编译降级代码
TypeScript target: esnext配置不生效的问题排查
当编译输出中出现__awaiter、__generator这类内置兼容工具函数时,本质上是TypeScript编译器根本没有应用你写的esnext目标配置,实际还是用默认的ES5规则在做语法降级。
常见触发原因
- 编译时直接在命令行传入了具体的文件路径,比如执行
tsc script.ts。按照TypeScript的编译规则,只要命令行里指定了要编译的单个文件,编译器会完全忽略项目目录下的所有tsconfig.json配置,直接使用内置默认参数编译,而默认参数的target就是ES5,自然会把async语法转成带helper的旧写法。 - 执行编译命令的工作目录和tsconfig.json所在目录不匹配。tsc自动加载tsconfig的规则是:从当前执行命令的目录开始,逐层向上查找同层级的tsconfig.json文件。如果tsconfig放在项目根目录,但你在src、dist这类子文件夹里执行编译命令,就会因为找不到配置文件,回到默认ES5编译逻辑。
正确操作步骤
- 直接在tsconfig.json所在的项目根目录下,执行不带任何文件参数的
tsc命令,编译器才会自动读取同目录下的配置文件。 - 可以执行
tsc --showConfig命令校验当前实际生效的配置,确认输出内容里的target值和你写的esnext一致,排除配置加载失败的问题。 - 如果确认配置已经成功加载,但还是输出冗余的helper代码,检查是否误开了
downlevelIteration这类强制降级的配置项——这类配置会无视target版本,强制插入迭代、异步相关的兼容工具函数,不需要的话直接删除对应配置即可。
配置真正生效后,你的async函数会被直接编译为原生JS语法,不会附加任何冗余的helper代码,输出结果为:
async function hello() { return "World"; }
内容的提问来源于stack exchange,提问作者Elle
相关产品推荐
相关产品推荐

