MST

星途 面试题库

面试题:TypeScript中命名空间与模块的基础差异

简要阐述TypeScript中命名空间(Namespace)和模块(Module)在定义方式、作用域及应用场景上的基础差异。
35.4万 热度难度
前端开发TypeScript

知识考点

AI 面试

面试题答案

一键面试

定义方式

  • 命名空间:使用 namespace 关键字定义,例如:
namespace MyNamespace {
    export const myValue = 42;
}
  • 模块:每个包含顶级 importexport 的文件都被视为一个模块。可以使用 export 关键字导出内容,例如:
// module.ts
export const myModuleValue = 100;

作用域

  • 命名空间:在其定义的文件内有全局作用域,不同文件中的同名命名空间会合并。例如:
// file1.ts
namespace MyNamespace {
    export const value1 = 1;
}
// file2.ts
namespace MyNamespace {
    export const value2 = 2;
}
// 此时MyNamespace包含value1和value2
  • 模块:具有自己独立的作用域,模块内的内容默认对外不可见,只有通过 export 导出后才能在其他模块中导入使用。

应用场景

  • 命名空间:适用于将相关代码组织在一起,主要用于内部代码结构的组织,在单个项目中避免命名冲突,特别是在没有使用模块系统的旧项目中。
  • 模块:更适合于大型项目中,用于代码的封装和复用。模块能更好地管理依赖关系,不同模块之间相互独立,便于代码的维护和扩展,是现代JavaScript和TypeScript项目中推荐的代码组织方式。