1. 命名空间 **namespace**
    2. ts 中命名空间使用 **namespace** 来定义
    3. ts 命名空间用于解决重名问题
    4. 假设这样一种情况,当一个班上有两个名叫小明的学生时,为了明确区分它们,我们在使用名字之外,不得不使用一些额外的信息,比如他们的姓(王小明,李小明),或者他们父母的名字等等
    5. 命名空间定义了标识符的可见范围,一个标识符可在多个名字空间中定义,它在不同名字空间中的含义是互不相干的
    6. 在一个新的名字空间中可定义任何标识符,它们不会与任何已有的标识符发生冲突,因为已有的定义都处于其他名字空间中
    7. 如果一个命名空间在一个单独的 ts 文件中,则应使用三斜杠 **///** 引用它
    8. 命名空间支持嵌套,即你可以将命名空间定义在另外一个命名空间里头
    1. // IShape.ts
    2. namespace Drawing {
    3. export interface IShape {
    4. draw();
    5. }
    6. }
    1. // Circle.ts
    2. /// <reference path = "IShape.ts" />
    3. namespace Drawing {
    4. export class Circle implements IShape {
    5. public draw() {
    6. console.log("Circle is drawn");
    7. }
    8. }
    9. }
    1. // Triangle.ts
    2. /// <reference path = "IShape.ts" />
    3. namespace Drawing {
    4. export class Triangle implements IShape {
    5. public draw() {
    6. console.log("Triangle is drawn");
    7. }
    8. }
    9. }
    1. // TestShape.ts
    2. /// <reference path = "IShape.ts" />
    3. /// <reference path = "Circle.ts" />
    4. /// <reference path = "Triangle.ts" />
    5. function drawAllShapes(shape: Drawing.IShape) {
    6. shape.draw();
    7. }
    8. drawAllShapes(new Drawing.Circle());
    9. drawAllShapes(new Drawing.Triangle());
    10. // Circle is drawn
    11. // Triangle is drawn

    输入 tsc --out app.js TestShape.ts 编译生成结果 app.js,然后再使用 node 命令 node .\app.js 来执行编译结果。

    编译后得到的 app.js 文件内容如下:

    1. // Circle.ts
    2. /// <reference path = "IShape.ts" />
    3. var Drawing;
    4. (function (Drawing) {
    5. var Circle = /** @class */ (function () {
    6. function Circle() {
    7. }
    8. Circle.prototype.draw = function () {
    9. console.log("Circle is drawn");
    10. };
    11. return Circle;
    12. }());
    13. Drawing.Circle = Circle;
    14. })(Drawing || (Drawing = {}));
    15. // Triangle.ts
    16. /// <reference path = "IShape.ts" />
    17. var Drawing;
    18. (function (Drawing) {
    19. var Triangle = /** @class */ (function () {
    20. function Triangle() {
    21. }
    22. Triangle.prototype.draw = function () {
    23. console.log("Triangle is drawn");
    24. };
    25. return Triangle;
    26. }());
    27. Drawing.Triangle = Triangle;
    28. })(Drawing || (Drawing = {}));
    29. // TestShape.ts
    30. /// <reference path = "IShape.ts" />
    31. /// <reference path = "Circle.ts" />
    32. /// <reference path = "Triangle.ts" />
    33. function drawAllShapes(shape) {
    34. shape.draw();
    35. }
    36. drawAllShapes(new Drawing.Circle());
    37. drawAllShapes(new Drawing.Triangle());
    38. // Circle is drawn
    39. // Triangle is drawn

    1. // Invoice.ts
    2. namespace Runoob {
    3. export namespace invoiceApp {
    4. export class Invoice {
    5. public calculateDiscount(price: number) {
    6. return price * .40;
    7. }
    8. }
    9. }
    10. }
    1. /// <reference path = "Invoice.ts" />
    2. var invoice = new Runoob.invoiceApp.Invoice();
    3. console.log(invoice.calculateDiscount(500));
    4. // 200