TypeScript 中 File is not a module 错误
当我们忘记使用 export
关键字从文件中导出值或 IDE 故障时,会出现错误“File is not a module”。 要解决此错误,确保将我们尝试导入的值导出到其他文件中,并在必要时重写导入路径并重新启动 IDE。
这是错误发生方式的示例。 这是一个名为 another-file.ts 的文件。
another-file.ts
// ?️ forgot to export function sum(a: number, b: number) { return a + b; }
这是一个名为 index.ts 的文件,它尝试从 another-file.ts 导入。
index.ts
// ⛔️ File is not a module.ts(2306) import { sum } from './another-file'; console.log(sum(50, 50));
文件 another-file.ts 不是模块,因为它没有 export
或 import
语句。
为了解决这个错误,我们必须将我们打算导入的所有成员导出到其他文件中。
another-file.ts
// ?️ named export export function sum(a: number, b: number) { return a + b; }
我们使用 export
关键字来导出 sum
函数。 现在我们可以在 index.ts 文件中导入它。
index.ts
// ?️ named import import { sum } from './another-file'; console.log(sum(50, 50)); // ?️ 100
错误“File is not a module”仅表示该文件不包含任何导出或导入语句。 任何包含至少 1 个 import
或 export
语句的文件都被视为一个模块。
另一个常见的错误原因是我们的 IDE(例如 VSCode 或 Sublime)出现故障。 如果您已经导出了要导入的值,最好删除导入语句中的路径并尝试使用我们的 IDE 自动完成路径,以便它可以拾取它。
确保保存我们的文件并在必要时重新启动 IDE/服务器。
上面的示例使用了命名的导出和导入。 我们还可以使用 default export
和 import
。
another-file.ts
// ?️ default export export default function sum(a: number, b: number) { return a + b; } // ?️ named export export const num = 250;
我们将导入 默认导出
而不用花括号括起来。
index.ts
// ?️ default and named imports import sum, { num } from './another-file'; console.log(sum(num, num)); // ?️ 500
重要提示
:如果要将变量(或箭头函数)导出为默认导出,则必须在第一行声明它并在下一行导出。 我们不能在同一行声明和默认导出变量。
命名导出和默认导出和导入之间的主要区别是 – 每个文件可以有多个命名导出,但只能有一个默认导出。
根据我的经验,大多数真实世界的代码库都专门使用命名导出和导入,因为它们可以更轻松地利用您的 IDE 进行自动完成和自动导入。
我们也不必考虑使用默认导出或命名导出导出哪些成员。