命名空间:在大量代码的情况下,为了防止各种变量命名冲突,可将相似功能的函数,类,接口房知道命名空间内;
ts的命名空间可以将代码包裹起来,只对外暴露需要外部访问的对象,命名空间内的对象通过export暴露
命名空间和模块的区别:命名空间是内部模块,主要用于组织代码,避免命名冲突;模块:ts外部模块的简称,侧重代码的重用,一个模块里可能有多个命名空间;
namespace A {
interface Animal {
name: string;
eat(): void;
}
export class Dog implements Animal {
name: string;
constructor(name: string) {
this.name = name;
}
eat(): void {
console.log(this.name+'在吃饭');
}
}
}
// 访问命名空间里面类
var ad = new A.Dog("狗子");
ad.eat()
也可以将命名空间模块化;例如下面的代码,分别是模块中的代码(包含两个命名空间),以及引用模块中的命名空间:
// 模块:
export namespace B {
interface Animal {
name: string;
eat(): void;
}
export class Horse implements Animal {
name: string;
constructor(name: string) {
this.name = name;
}
eat(): void {
console.log(this.name+'在吃饭');
}
}
}
export namespace C {
interface Animal {
name: string;
eat(): void;
}
export class Horse implements Animal {
name: string;
constructor(name: string) {
this.name = name;
}
eat(): void {
console.log(this.name+'在大酒店吃饭');
}
}
}
// 引用模块并使用里面的命名空间
import { B, C } from './modules/ns';
var hb = new B.Horse("小马");
hb.eat()
var hc = new C.Horse("大马");
hc.eat()