返回

模块和命名空间,让TS更井然有序

前端

模块

在 TypeScript 中,模块是代码组织的基本单元,它允许将相关代码分组在一起,以便于管理和重用。模块可以包含函数、类、接口、枚举和变量等元素。要创建一个模块,可以使用以下语法:

module <module-name> {
  // 代码
}

例如,以下代码创建一个名为 math 的模块,其中包含两个函数:

module math {
  export function add(a: number, b: number): number {
    return a + b;
  }

  export function subtract(a: number, b: number): number {
    return a - b;
  }
}

为了使用模块中的代码,需要先导入该模块。可以使用以下语法导入模块:

import { <module-name> } from "<module-path>";

例如,以下代码导入 math 模块中的 addsubtract 函数:

import { add, subtract } from "./math";

现在就可以在代码中使用 addsubtract 函数了:

const result1 = add(1, 2); // 3
const result2 = subtract(4, 3); // 1

命名空间

命名空间是 TypeScript 中另一种组织代码的方式,它允许将相关代码分组在一个逻辑命名空间中。命名空间可以包含模块、类、接口、枚举和变量等元素。要创建一个命名空间,可以使用以下语法:

namespace <namespace-name> {
  // 代码
}

例如,以下代码创建一个名为 Shapes 的命名空间,其中包含两个类:

namespace Shapes {
  export class Circle {
    // 代码
  }

  export class Square {
    // 代码
  }
}

为了使用命名空间中的代码,需要先导入该命名空间。可以使用以下语法导入命名空间:

import * as <namespace-name> from "<namespace-path>";

例如,以下代码导入 Shapes 命名空间中的 CircleSquare 类:

import * as Shapes from "./shapes";

现在就可以在代码中使用 Shapes.CircleShapes.Square 类了:

const circle = new Shapes.Circle();
const square = new Shapes.Square();

声明文件

声明文件是一种特殊的文件,它用于声明库和类型的类型信息。声明文件通常以 .d.ts 为后缀名。声明文件中不能包含任何代码实现,只能包含类型信息。声明文件的作用是帮助 TypeScript 编译器理解库和类型的结构和用法,从而避免在编译时出现错误。

例如,以下是一个 math.d.ts 声明文件,其中声明了 math 模块中的 addsubtract 函数的类型:

declare module "math" {
  export function add(a: number, b: number): number;
  export function subtract(a: number, b: number): number;
}

使用声明文件后,TypeScript 编译器就可以在编译时检查代码中对 math 模块的使用是否正确,从而避免出现错误。

总结

在 TypeScript 中,模块和命名空间是组织代码的基本单元,它们有助于将代码分成可重用的单元,使代码更易于维护和理解。声明文件则用于声明库和类型的类型信息,帮助 TypeScript 编译器理解库和类型的结构和用法,从而避免在编译时出现错误。