在TypeScript中,模块和命名空间都是用来组织代码的方式,但它们有一些区别:
- 命名空间: 是一种简单的组织代码的方式,通过关键字
namespace
声明。它可以包含类型、接口、变量、函数等。 - 模块: 是ES6引入的概念,是一个封装了代码和资源的文件,通过
export
和import
来导出和导入。
命名空间示例代码:
namespace Geometry {
export interface Point {
x: number;
y: number;
}
export function createPoint(x: number, y: number): Point {
return { x, y };
}
}
let point = Geometry.createPoint(1, 2);
模块示例代码:
// math.ts
export interface Point {
x: number;
y: number;
}
export function createPoint(x: number, y: number): Point {
return { x, y };
}
// main.ts
import { createPoint, Point } from './math';
let point: Point = createPoint(1, 2);
在模块化的应用中,推荐使用模块,因为它是JavaScript的现代化实践,并且能够更好地支持大型应用的代码组织和管理。而命名空间则更多用于小型项目或者需要向下兼容旧版TypeScript的场景。