无法写入文件,因为它会覆盖输入文件 TS

无法写入文件,因为它会覆盖输入文件 TS

Cannot write file because it would overwrite input file TS

当我们没有在文件中的数组
中指定
outDir目录时,会出现错误“无法写入文件,因为它会覆盖输入文件” excludetsconfig.json

要解决该错误,请确保将您的构建目录排除在类型检查和编译之外。

发生错误的其他常见原因:

  1. 从构建目录导入 – 请注意,VSCode 有时会从错误的源自动完成。
  2. 具有循环依赖性,尤其是在使用 monorepos 时。

将你的构建目录排除在类型检查之外

您应该做的第一件事是确保排除项目的构建目录。打开我们的tsconfig.json
文件并查看您的
outDir设置。

tsconfig.json文件
{ "compilerOptions": { "outDir": "build", }, "include": ["src/**/*"], "exclude": ["node_modules", "build/**/*"] }

build目录是 TypeScript 将输出发出的文件的地方。

确保您已将指定的
outDir添加到exclude示例中的数组中。

你可能想在排除故障时重新启动 IDE,因为 VSCode 经常出现故障。

排除构建目录后,请尝试将其删除,然后重新运行构建步骤。

确保你没有从你的构建目录中导入任何东西

接下来你应该确定的是你没有从你的构建目录中导入任何东西。

使用自动导入时,您的 IDE 可能会出现故障并从您的distbuild目录中导入某些内容。

您可以使用 IDE 中的搜索功能,例如ctrl + shift + f查找如下所示的导入(取决于您的outDir命名方式):

索引.ts
import {myFunction} from '../../../dist/my-folder/my-function' import {myFunction} from '../../../build/my-folder/my-function'

如果您从构建目录中发现任何导入,请更新它们并重新启动您的 IDE。

确保你没有循环依赖

确保你没有任何循环依赖。

循环依赖是指 2 个文件相互依赖。例如,文件
A从文件导入B,文件B从文件导入A

这是非常有问题的,尤其是在使用 monorepos 时。您可能有 2 个包,它们相互依赖并混合了导入。

使用 monorepos 时,请确保在导入同一包的成员时没有任何引用包名称的导入。

例如,确保您没有像 – 这样的导入
import {myFunction} from '@same-package/my-function'

相反,您应该在同一个包中使用相对导入,例如
import {myFunction} from './my-function'.

在你的文件allowJs设置falsetsconfig.json

如果错误仍然存​​在,请尝试在您的文件中
设置
allowJs选项falsetsconfig.json

tsconfig.json文件
{ "compilerOptions": { "allowJs": false, // ... other options }, }

allowJs选项允许将具有.js和扩展名的文件.jsx导入到您的项目中。

当错误地从构建目录导入文件时,这通常是一个问题。

如果错误仍然存​​在,请确保您没有使用index.ts诸如import {myFunction} from '../../../'.

尝试将导入更改为import {myFunction} from '../../../index'.

我还写了一篇关于
如何从 TS 中的另一个文件导入值的详细指南。