Namespaces - TypeScript
Namespaces (os espaços de nomes) são utilizados para organizar programas grandes. Os namespaces podem conter classes, interfaces, objetos, funções, variáveis e constantes que são usados em um contexto comum.
Para definir espaços de nomes, utiliza-se a palavra-chave namespace
namespace Personnel {
export class Employee {
constructor(public name: string) {
}
}
}
Neste caso, o namespace é chamado Personnel
Employee
export
Employee
namespace Personnel {
export class Employee {
constructor(public name: string) {
}
}
}
let alice = new Personnel.Employee("Alice");
console.log(alice.name); // Alice
Os namespaces podem conter interfaces, objetos, funções e até mesmo variáveis e constantes comuns:
namespace Personnel {
export interface IUser {
displayInfo(): void;
}
export class Employee {
constructor(public name: string) {
}
}
export function work(emp: Employee): void {
console.log(emp.name, "is working");
}
export let defaultUser = { name: "Kate" };
export let value = "Hello";
}
let tom = new Personnel.Employee("Tom");
Personnel.work(tom); // Tom is working
console.log(Personnel.defaultUser.name); // Kate
console.log(Personnel.value); // Hello
Namespace em Arquivo Separado
Frequentemente, namespaces são definidos em arquivos separados. Por exemplo, definimos o arquivo personnel.ts
namespace Personnel {
export class Employee {
constructor(public name: string) {
}
}
export class Manager {
constructor(public name: string) {
}
}
}
E, na mesma pasta, definimos o arquivo principal da aplicação app.ts
/// <reference path="personnel.ts" />
let tom = new Personnel.Employee("Tom");
console.log(tom.name);
let sam = new Personnel.Manager("Sam");
console.log(sam.name);
A diretiva /// <reference path="personnel.ts" />
personnel.ts
Em seguida, precisamos unir ambos os arquivos em um único arquivo que pode ser incluído na página web. Para isso, na compilação, especificamos a opção:
--outFile target.js source1.ts source2.ts source3.ts ...
A opção --outFile
Neste caso, executamos no console o comando:
tsc --outFile app.js app.ts personnel.ts
Como resultado, será criado um único arquivo app.js
Namespaces Aninhados
Namespaces podem ser aninhados:
namespace Data {
export namespace Personnel {
export class Employee {
constructor(public name: string) {
}
}
export namespace Clients {
export class VipClient {
constructor(public name: string) {
}
}
}
}
let tom = new Data.Personnel.Employee("Tom");
console.log(tom.name);
let sam = new Data.Clients.VipClient("Sam");
console.log(sam.name);
Observe que os namespaces aninhados são definidos com a palavra-chave export
Aliases
Pode ser que precisemos criar muitos objetos Data.Personnel.Employee
import
namespace Data {
export namespace Personnel {
export class Employee {
constructor(public name: string) {
}
}
}
}
import employee = Data.Personnel.Employee;
let tom = new employee("Tom");
console.log(tom.name);
Após declarar o alias, employee
Data.Personnel.Employee