模块:
TypeScript 的模块是一种组织和封装代码的方式,使得代码更易于管理和复用。TypeScript 遵循 ECMAScript 6 (ES6) 的模块规范,并提供了静态类型的支持。
在 TypeScript 中,你可以使用 import
和 export
关键字来导入和导出模块。这使得你可以将代码分割成多个文件,每个文件都是一个模块,然后按需导入所需的模块。
导出模块
你可以使用 export
关键字来导出模块中的类、函数、变量或类型。例如:
// mathFunctions.ts
export function add(x: number, y: number): number {
return x + y;
}
export function subtract(x: number, y: number): number {
return x - y;
}
导入模块
然后,你可以在其他 TypeScript 文件中使用 import
关键字来导入这些模块。例如:
// main.ts
import { add, subtract } from './mathFunctions';
let sum = add(10, 20);
let difference = subtract(10, 20);
console.log(`Sum: ${sum}, Difference: ${difference}`);
在这个例子中,main.ts
文件导入了 mathFunctions.ts
模块中的 add
和 subtract
函数,并使用了它们。
模块解析
TypeScript 使用 Node.js 的模块解析策略来查找模块。这意味着,当你导入一个模块时,TypeScript 会尝试在当前目录下查找该模块,如果找不到,则会按照 Node.js 的模块解析规则去查找。
命名空间:
TypeScript 的命名空间(Namespace)是一种封装代码的方式,用于将相关的代码组织在一起,以避免命名冲突。这类似于其他编程语言中的包(package)或模块(module)的概念。在 TypeScript 中,命名空间可以包含类、接口、类型别名、函数和变量等。
看个例子:
namespace MyNamespace {
export const count: number = 1000
export class MyClass {
constructor() {
// ...
}
}
export function myFunction() {
// ...
}
}
MyNamespace.count // 1000
MyClass
和 myFunction
都被定义在 MyNamespace
命名空间中,并且都被导出,这意味着它们可以在命名空间外部被访问。
嵌套命名空间:
namespace MyNamespace {
export namespace childNamepace {
export const count: number = 1000
export class MyClass {
constructor() {
// ...
}
}
export function myFunction() {
// ...
}
}
}
MyNamespace.childNamepace.count // 1000
console.log(MyNamespace.childNamepace.count);
命名空间中需要通过export
将想要暴露的部分导出,才能访问!