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));

TypeScript 中 File is not a module 错误

文件 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 进行自动完成和自动导入。

我们也不必考虑使用默认导出或命名导出导出哪些成员。