Для организации больших программ предназначены пространства имен. Пространства имен содержат группу классов, интерфейсов, функций, других пространств имен, которые могут использоваться в некотором общем контексте.
Для определения пространств имен используется ключевое слово namespace:
namespace UserNamespace {
export interface IUser {
displayInfo();
}
export class User implements IUser {
private _id: number;
private _name: string;
constructor(id: number, name: string) {
this._id = id;
this._name = name;
}
displayInfo() {
console.log("id: " + this._id + "; name: " + this._name);
}
}
let defaultUser: IUser = new User(2, "Tom");
}
// создаём объект класса
let alice = new UserNamespace.User(4, "Alice");
alice.displayInfo();
Псевдонимы
Возможно, нам приходится создавать множество объектов
UserNamespace.Employees.Employee
, но каждый раз набирать полное имя класса с учетом пространств имен, вероятно, не всем понравиться, особенно когда модули имеют глубокую вложенность по принципу матрешки. Чтобы сократить объем кода, мы можем использовать псевдонимы, задаваемые с помощью ключевого слова import. Например:
namespace UserNamespace.Employees {
export class Employee extends User {
}
export class Manager extends User { }
}
import employee = UserNamespace.Employees.Employee;
let alice = new employee(4, "Alice");
alice.displayInfo();
let bill = new employee(5, "Bill");
bill.displayInfo();
Слияние модулей
В программе можно несколько раз объявить модуль с одним и тем же именем, в этом случае все эти определения потом сольются в один модуль.
namespace UserNamespace {
export class User{
}
}
namespace UserNamespace {
export class Employee extends User {
}
export class Manager extends User { }
}