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)