一、命名空间
- 在代码量较大的情况下,为了避免各种变量命名冲突,可将相似功能的函数、类、接口等放置到命名空间内
- 使用命名空间中的变量或类、方法,需要使用export
示例:
// 命名空间A
namespace A {
export const nameStr: string = '这是命名空间A';
interface Animal {
name: string;
eat(): void;
}
export class Dog implements Animal {
name: string;
constructor(name: string) {
this.name = name;
}
eat() {
console.log(`${this.name} 吃狗粮`);
}
}
export function sayHello() {
console.log('hello A');
}
}
// 使用命名空间中的变量
console.log(A.nameStr); // 这是命名空间A
// 使用命名空间中的类
const dogA = new A.Dog('旺财');
// 使用命名空间中的方法
A.sayHello(); // hello A
二、模块
使用export 导出命名空间A
file1.ts
// 命名空间A
export namespace A {
export const nameStr: string = '这是命名空间A';
interface Animal {
name: string;
eat(): void;
}
export class Dog implements Animal {
name: string;
constructor(name: string) {
this.name = name;
}
eat() {
console.log(`${this.name} 吃狗粮`);
}
}
export function sayHello() {
console.log('hello A');
}
}
使用import 导入 A
file2.ts
import { A } from './file1.ts';
const dogA = new A.Dog('旺财');
dogA.eat(); // 旺财 吃狗粮
命名空间和模块的区别:
- 命名空间:内部模块,主要用于组织代码,避免命名冲突
- 模块:ts的外部模块简称,侧重代码的重用,一个模块里可能有多个命名空间