Skip to content

命名空间

注意

在代码量较大的情况下,为了避免各种变量命名相冲突,可将相似功能的函数,类,接口等放置到命名空间内,如果想在命名空间外访问,则用 export 到处。用关键字 namespace 来声明命名空间

分离到多文件

bash
当应用变得很大时候,我们需要将代码分离到不同的文件,以便维护.这就是多文件的命名空间

作用

bash
简单来说就是逻辑分组和避免命名冲突

使用命名空间必须有 export 导出

js
 //Validation.ts
  namespace Validation {
    export interface StringValidator {
      isAcceptable(s:string): boolean;
    }
  }

  //LettersOnlyValidator.ts
  /// <reference path="./Validation" />
  namespace Validation {
    const lettersRegexp = /^[A-Za-z]+$/;
    export class LettersOnlyValidator implements StringValidator {
      isAcceptable( s: string ) : boolean {
        return lettersRegexp.test(s);
      }
    }
  }

  //ZipCodeValidator.ts
  /// <reference path="./Validation.ts" />
  namespace Validation {
    const numberRegexp = /^[0-9]+$/;
    export class ZipCodeValidatior implements StringValidator {
      isAcceptable( s: string ) : boolean {
        return s.length === 5 && numberRegexp.test(s)
      }
    }
  }

  //Test.ts
  ///<reference path="Validator.ts" />
  ///<reference path="LettersOnlyValidator.ts" />
  ///<reference path="ZipCodeValidator.ts" />
  let strings = ["Hello", "98502", "101"];
  let validators: { [s: string ] : Validation.StringValidator } = {};
  validators["ZIP code"] = new Validation.ZipCodeValidator();
  validators["Letters only"] = new Validation.LettersOnlyValidator();

  for (let s of strings ) {
    for( let name in validators ) {
      console.log(""" + s + "" " + (validators[name]).isAcceptable(s) ? "matches" : " does not match " + name)
    }
  }

  //Summery:
  //在ts中引用带命名空间的文件,用三斜线指令引入要引用的文件。但貌似在实际开发过程中,我们还是用模块用得比较多。

别名(一般用的少)

js

namespace Shapes {
    export namespace Polygons {
      export class Triangle {}
      export class Square {}
    }
  }

  import polygons = Shapes.Polygons;
  let sq = new polygons.Square();