文件名仅在大小写中与包含的文件名不同

文件名仅在大小写上与包含的文件名不同

File name differs from included file name only in casing

当我们有两个名称相同但大小写不同或文件重命名的文件和我们的 IDE 故障时,会出现错误“文件名与仅在大小写中包含的文件名不同”。

要解决此错误,请确保没有两个文件只是大小写不同,然后重新启动 IDE。

文件名仅大小写不同

下面是错误如何发生的示例。

索引.ts
// Error: File name '/home/borislav/Desktop/typescript/src/Index.ts' // differs from already included file name // '/home/borislav/Desktop/typescript/src/index.ts' only in casing. import { country } from './Index'; console.log(country);

这是一个名为的文件,它从同一目录中名为
(capital )
index.ts的文件导入。Index.tsI

如果这是导致项目错误的原因,请确保重命名其中一个文件,因为同一目录中的 2 个文件的名称不能仅在大小写上不同,例如myFile.tsMyFile.ts.

重启你的代码编辑器

错误的另一个常见原因是当我们重命名文件以使用不同的大小写和我们的 IDE 故障(VSCode 通常需要重新启动)。

例如,如果您重命名myFile.tsMyFile.ts,您的代码编辑器可能无法判断这是同一个文件。

完全重启您的 IDE,因为
重新加载 VSCode 窗口在大多数情况下都无法完成工作。

重新启动后,您的 IDE 应该能够发现同一目录中没有两个同名文件。

如果这没有帮助,请尝试重新启动您的 TS 服务器。

包含错误大小写的导入路径

如果导入路径的大小写错误,也会出现此错误。

索引.ts
import { country } from './myFile'; import { country } from './MyFile';

这两个 import 语句在机器上的作用相同,Windows因为文件名Windows不区分大小写。

但是,如果您在 Linux 或 macOS 等类 Unix 操作系统上运行此代码,您会收到错误消息,因为它们区分大小写处理文件名,并且这是两个完全不同的文件。

确保导入语句中的路径没有错误的大小写。

如果所有建议都不起作用,请尝试将特定文件重命名为占位符名称placeholder.ts,然后将其重命名回原始名称。

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

在中设置“forceConsistentCasingInFileNames”tsconfig.json

有时这有助于 IDE 意识到没有两个文件具有相同的名称,但大小写不一致。

最佳做法是使用tsconfig.jsonforceConsistentCasingInFileNames文件中的选项

tsconfig.json文件
{ "compilerOptions": { "forceConsistentCasingInFileNames": true, // ... } }


forceConsistentCasingInFileNames
选项设置为
true时,如果您尝试使用与磁盘上文件名大小写不同的大小写来包含文件,TypeScript 将发出错误。

例如,如果您尝试从 导入MyFile.ts,但文件的名称是
myFile.ts,则会出现错误。

当此选项设置为 时false,TypeScript 遵循其运行的文件系统的区分大小写规则。

如果您团队中的一些开发人员使用 Windows 机器和其他类 Unix 操作系统,这可能会非常混乱,因为如果您尝试通过myFile.ts指定导入MyFile.ts,它将在 Windows 上找到,但在 macOS 或 Linux 上找不到。

额外资源

您可以通过查看以下教程来了解有关相关主题的更多信息: