TypeScript导入rootDir外文件的TS6059错误配置解决方案咨询
解决TS6059报错:导入外部目录文件不在rootDir下的问题
方案1:移除rootDir,用include指定编译范围
rootDir的核心限制是要求所有被编译的源文件都在它的子目录下,而你导入的App3文件显然不在这个范围内。直接移除rootDir配置,改用include明确指定只编译当前App的TS文件,就能避开这个限制:
修改App1的tsconfig.json:
{ "extends": "../../../tsconfig.json", "compilerOptions": { "outDir": "js" // 删除原有的rootDir配置 }, "include": ["./ts/**/*"] // 仅编译App1自己的TS文件 }
这样TS只会处理App1的ts目录下的文件,导入的App3文件不会被纳入编译流程,自然不会触发TS6059错误,同时outDir依然会保持ts目录的结构输出到js文件夹中。
方案2:修改导入路径为已编译的JS文件
如果App3已经通过自身的tsconfig.json完成了编译,你可以直接导入它生成的JS文件,而非TS源文件——这样TS会把它当作外部依赖,不会当作需要编译的源文件:
修改App1的导入语句:
// App1/static/App1/test.ts import { module } from "../../../../App3/static/App3/js/module.js"
这种方式不需要修改tsconfig.json,但要确保App3的TS文件已经提前编译完成。
方案3:正确配置rootDirs(若需保留rootDir逻辑)
如果你一定要保留rootDir相关配置,可以用rootDirs声明多个虚拟根目录,让TS把指定的多个目录当作同一个逻辑根目录,这样就不会因为路径不在单个rootDir下而报错:
修改App1的tsconfig.json:
{ "extends": "../../../tsconfig.json", "compilerOptions": { "outDir": "js", "rootDirs": ["./ts", "../../../App3/static/App3/ts"] // 将两个TS目录设为虚拟根目录 // 移除原有的rootDir配置 }, "include": ["./ts/**/*"] // 依然只编译App1自己的文件 }
内容的提问来源于stack exchange,提问作者Eddysanoli
相关产品推荐
相关产品推荐

