TypeScript 命名空間-Namespace


TypeScript 通過 tsc 編譯成 JavaScript 時,用的是 var 全局變量,var 用多了會造成全局變量污染,為了解決這個問題,使用命名空間。

# 生成 package.json 文件
npm init -y
# 生成 tsconfig.json文件
tsc -init

命名空間

namespace Home {
  class Header {
    constructor() {
      const elem = document.createElement("div");
      elem.innerText = "This is Header";
      document.body.appendChild(elem);
    }
  }

  class Content {
    constructor() {
      const elem = document.createElement("div");
      elem.innerText = "This is Content";
      document.body.appendChild(elem);
    }
  }

  class Footer {
    constructor() {
      const elem = document.createElement("div");
      elem.innerText = "This is Footer";
      document.body.appendChild(elem);
    }
  }

  export class Page {
    constructor() {
      new Header();
      new Content();
      new Footer();
    }
  }
}

使用:

new Home.Page();

只能通過 Home 訪問 Page,其他變量無法訪問,避免了全局變量的污染。
這就是 TypeScript 給我們提供的類似模塊化開發的語法,它的好處就是讓全局變量減少了很多,實現了基本的封裝,減少了全局變量的污染。

多命名空間(組件化)

namespace Components {
  export class Header {
    constructor() {
      const elem = document.createElement("div");
      elem.innerText = "This is Header";
      document.body.appendChild(elem);
    }
  }

  export class Content {
    constructor() {
      const elem = document.createElement("div");
      elem.innerText = "This is Content";
      document.body.appendChild(elem);
    }
  }

  export class Footer {
    constructor() {
      const elem = document.createElement("div");
      elem.innerText = "This is Footer";
      document.body.appendChild(elem);
    }
  }
}
namespace Home {
  export class Page {
    constructor() {
      new Components.Header();
      new Components.Content();
      new Components.Footer();
    }
  }
}

為了便利,需要把這兩個 ts 文件編譯輸出成一個 js 文件,參考:TypeScript 多個文件編譯成一個 js 文件

子命名空間


namespace Components {
  export namespace SubComponents {
    export class Test {}
  }

  //someting ...
}

相關文章:
TypeScript 多個文件編譯成一個 js 文件
參考:
技術胖——TypeScript從入門到精通(22. 初識命名空間-Namespace)
技術胖——TypeScript從入門到精通(23. 深入命名空間-Namespace)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM