无法写入文件,因为它会覆盖输入文件 TS
Cannot write file because it would overwrite input file TS
当我们没有在文件中的数组
中指定outDir
目录时,会出现错误“无法写入文件,因为它会覆盖输入文件” 。exclude
tsconfig.json
要解决该错误,请确保将您的构建目录排除在类型检查和编译之外。
发生错误的其他常见原因:
- 从构建目录导入 – 请注意,VSCode 有时会从错误的源自动完成。
- 具有循环依赖性,尤其是在使用 monorepos 时。
将你的构建目录排除在类型检查之外
您应该做的第一件事是确保排除项目的构建目录。打开我们的tsconfig.json
文件并查看您的outDir
设置。
{ "compilerOptions": { "outDir": "build", }, "include": ["src/**/*"], "exclude": ["node_modules", "build/**/*"] }
该build
目录是 TypeScript 将输出发出的文件的地方。
确保您已将指定的
outDir添加到exclude
示例中的数组中。
你可能想在排除故障时重新启动 IDE,因为 VSCode 经常出现故障。
排除构建目录后,请尝试将其删除,然后重新运行构建步骤。
确保你没有从你的构建目录中导入任何东西
接下来你应该确定的是你没有从你的构建目录中导入任何东西。
使用自动导入时,您的 IDE 可能会出现故障并从您的dist
或build
目录中导入某些内容。
您可以使用 IDE 中的搜索功能,例如ctrl + shift + f
查找如下所示的导入(取决于您的outDir
命名方式):
import {myFunction} from '../../../dist/my-folder/my-function' import {myFunction} from '../../../build/my-folder/my-function'
如果您从构建目录中发现任何导入,请更新它们并重新启动您的 IDE。
确保你没有循环依赖
循环依赖是指 2 个文件相互依赖。例如,文件
A
从文件导入B
,文件B
从文件导入A
。
这是非常有问题的,尤其是在使用 monorepos 时。您可能有 2 个包,它们相互依赖并混合了导入。
例如,确保您没有像 – 这样的导入
import {myFunction} from '@same-package/my-function'
。
相反,您应该在同一个包中使用相对导入,例如
import {myFunction} from './my-function'
.
在你的文件allowJs
中设置false
tsconfig.json
如果错误仍然存在,请尝试在您的文件中
设置allowJs
选项。false
tsconfig.json
{ "compilerOptions": { "allowJs": false, // ... other options }, }
allowJs选项允许将具有.js
和扩展名的文件.jsx
导入到您的项目中。
当错误地从构建目录导入文件时,这通常是一个问题。
如果错误仍然存在,请确保您没有使用index.ts
诸如import {myFunction} from '../../../'
.
尝试将导入更改为import {myFunction} from '../../../index'
.
我还写了一篇关于
如何从 TS 中的另一个文件导入值的详细指南。