一、命名空间

  • 在代码量较大的情况下,为了避免各种变量命名相冲突,可将相似功能的函数、类、接口等放置到命名空间内
  • 同Java的包、.Net的命名空间一样,TypeScript的命名空间可以将代码包裹起来,只对外暴露需要在外部访问的对象。命名空间内的对象通过export关键字对外暴露
    1. // namespace 来定义命名空间,里面的方法需要export出去
    2. namespace A {
    3. interface Animal {
    4. name: string;
    5. eat(): void;
    6. }
    7. export class Dog implements Animal {
    8. name: string;
    9. constructor(theName: string) {
    10. this.name = theName;
    11. }
    12. eat() {
    13. console.log(`${this.name} 在吃狗粮。`);
    14. }
    15. }
    16. export class Cat implements Animal {
    17. name: string;
    18. constructor(theName: string) {
    19. this.name = theName;
    20. }
    21. eat() {
    22. console.log(`${this.name} 吃猫粮。`);
    23. }
    24. }
    25. }
    26. var B = new A.Cat('小花');
    27. B.eat();

二、命名空间块化

  • 命名空间:内部模块,主要用于组织代码,避免命名冲突
  • 模块:ts的外部模块的简称,侧重代码的复用,一个模块里可能会有多个命名空间 ```typescript export namespace A { interface Animal {
    1. name: string;
    2. eat(): void;
    } export class Dog implements Animal {
    1. name: string;
    2. constructor(theName: string) {
    3. this.name = theName;
    4. }
    5. eat() {
    6. console.log(`${this.name} 在吃狗粮。`);
    7. }
    } export class Cat implements Animal {
    1. name: string;
    2. constructor(theName: string) {
    3. this.name = theName;
    4. }
    5. eat() {
    6. console.log(`${this.name} 吃猫粮。`);
    7. }
    } }

// 页面使用 import { A, B } from ‘./modules/animal’; var d = new A.Dog(‘小黑’); d.eat(); ```