命名空間
在代碼量較大的情況下,為了避免各種變量命名相沖突,可将相似功能的函數、類、接口等放置到命名空間。
同Java包、.net命名空間一樣,TypeScript的命名空間可以将代碼包裹起來,隻對外暴露需要在外部通路的對象。
- 命名空間:内部子產品,主要用于組織代碼,避免命名沖突。
- 子產品: ts的外部子產品的簡稱,側重代碼的複用,一個子產品裡可能會有多個命名空間。
namespace A { // 命名空間A是私有的
interface Animal {
name: String;
eat(): void
}
export class Dog implements Animal { // 外部需要使用Dog,通過export暴露
name: String;
constructor(theName: string) {
this.name = theName;
}
eat() {
console.log('`${this.name}吃狗糧。');
}
}
class Cat implements Animal {
name: String;
constructor(theName: string) {
this.name = theName;
}
eat() {
console.log('`${this.name}吃貓糧。');
}
}
}
namespace B { // 命名空間B是私有的
interface Animal {
name: String;
eat(): void
}
export class Dog implements Animal { // 外部需要使用Dog,通過export暴露
name: String;
constructor(theName: string) {
this.name = theName;
}
eat() {
console.log('`${this.name}吃狗糧。');
}
}
class Cat implements Animal {
name: String;
constructor(theName: string) {
this.name = theName;
}
eat() {
console.log('`${this.name}吃貓糧。');
}
}
}
import { A, B } from './modules/animal'
var d = new A.Dog('Duoduo');
d.eat();
var d2 = new B.Dog('Duoduo');
d2.eat();