随着项目结构变大,代码中可能出现重复函数名、变量名互相覆盖的问题,这可以用命名空间和模块解决。
实际上,只用模块其实已经可以较好的解决这个问题了,但是TypeScript额外引入了命名空间的概念,可以将代码划分的更细致。TypeScript中,命名空间的用法和C#
很像。
下面代码在命名空间userManagement
中定义和类User
:
namespace userManagement {
// 需要在命名空间外调用的类、接口等,需要用export声明
export class User {
username:string;
password:string;
constructor(username: string, password: string) {
this.username = username;
this.password = password;
}
}
}
let user:userManagement.User = new userManagement.User('Tom', 'abc123');
console.log(user);
引用命名空间中的内容时,使用命名空间.类名
就可以了。
此外,命名空间是支持嵌套的:
namespace BusinessService {
export namespace UserManagement {
// 需要在命名空间外调用的类、接口,需要用export声明
export class User {
username:string;
password:string;
constructor(username: string, password: string) {
this.username = username;
this.password = password;
}
}
}
}
let user:BusinessService.UserManagement.User = new BusinessService.UserManagement.User('Tom', 'abc123');
console.log(user);