一、命名空间
- 在代码量较大的情况下,为了避免各种变量命名相冲突,可将相似功能的函数、类、接口等放置到命名空间内
- 同Java的包、.Net的命名空间一样,TypeScript的命名空间可以将代码包裹起来,只对外暴露需要在外部访问的对象。命名空间内的对象通过export关键字对外暴露
// namespace 来定义命名空间,里面的方法需要export出去namespace A {interface Animal {name: string;eat(): void;}export class Dog implements Animal {name: string;constructor(theName: string) {this.name = theName;}eat() {console.log(`${this.name} 在吃狗粮。`);}}export class Cat implements Animal {name: string;constructor(theName: string) {this.name = theName;}eat() {console.log(`${this.name} 吃猫粮。`);}}}var B = new A.Cat('小花');B.eat();
二、命名空间块化
- 命名空间:内部模块,主要用于组织代码,避免命名冲突
- 模块:ts的外部模块的简称,侧重代码的复用,一个模块里可能会有多个命名空间
```typescript
export namespace A {
interface Animal {
} export class Dog implements Animal {name: string;eat(): void;
} export class Cat implements Animal {name: string;constructor(theName: string) {this.name = theName;}eat() {console.log(`${this.name} 在吃狗粮。`);}
} }name: string;constructor(theName: string) {this.name = theName;}eat() {console.log(`${this.name} 吃猫粮。`);}
// 页面使用 import { A, B } from ‘./modules/animal’; var d = new A.Dog(‘小黑’); d.eat(); ```
