Typescript學習筆記(16) ----- namespace 命名空間

命名空間可以解決模塊化問題, 防止暴露統(tǒng)一的接口

比如,Header,Body,Footer是三個模塊

// index.ts 文件
class Header{
  constructor(){
    let element = document.createElement('div')
    element.innerText='Header'
    document.body.appendChild(element)
  }
}

class Body{
  constructor(){
    let element = document.createElement('div')
    element.innerText='Body'
    document.body.appendChild(element)
  }
}

class Footer{
  constructor(){
    let element = document.createElement('div')
    element.innerText='Footer'
    document.body.appendChild(element)
  }
}

class Page{
  constructor(){
    new Header()
    new Body()
    new Footer()
  }
}

//html 文件
<script>
  new Page()
</script>

這樣編寫完成之后,雖然完成了簡單的拆分,但沒有完全做到模塊化。
從編譯完的代碼中,可以發(fā)現(xiàn),Header,Body,Footer都升為了全局變量。

image.png

從console里面可以訪問到這個變量
image.png

為了能夠防止變量的暴露,這里需要用到命名空間去進行限制。

namespace Home{
  class Header{
    constructor(){
      let element = document.createElement('div')
      element.innerText='Header'
      document.body.appendChild(element)
    }
  }
  
  class Body{
    constructor(){
      let element = document.createElement('div')
      element.innerText='Body'
      document.body.appendChild(element)
    }
  }
  
  class Footer{
    constructor(){
      let element = document.createElement('div')
      element.innerText='Footer'
      document.body.appendChild(element)
    }
  }
  
  export class Page{
    constructor(){
      new Header()
      new Body()
      new Footer()
    }
  }
}
//index.html
<script>
  new Home.Page()
</script>

使用命名空間包裹了一層之后,就不會對外暴露了

如果需要掛載在命名空間上需要使用export

可以接著上面的繼續(xù)進行拆分,將組件相關(guān)的拆到component.ts之中。
然后更改一下對compoent下的文件的引用。

new Components.Header()
new Components.Body()
new Components.Footer()

由于分別在兩個文件之中引入了命名空間,所以在html中需要引入兩個相關(guān)的文件,亦或者將多個文件編譯到同一份文件中去。

  • 更改tsconfig.json中的outFile 屬性,制定打包后的文件名
  • 更改之后,會報錯,需要將module更改為amd
    "module": "amd",
    "outFile": "./build/page.js", 
  • namespace之間的依賴關(guān)系
    通過/// <reference path=''>這樣的形式表示
/// <reference path='./component.ts'/>
namespace Home{
  export class Page{
    constructor(){
      new Components.Header()
      new Components.Body()
      new Components.Footer()
    }
  }
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內(nèi)容