Este post é o quinto de uma série de 6 posts sobre TypeScript. Veja os detalhes dos posts aqui.

Post anterior: TypeScript – Classes

Os módulos no TypeScript, ajudam a separar as classes. Pense em algo parecido com “namespace” do C#. Assim é possível distribuir melhor as classes, alem de classificar as classes por segmento, por exemplo. Classes sem módulo, tende a se espalhar pelo projeto, fica difícil localizar uma funcionalidade especifica. Módulos ajudam a manter o código com um papel específico contido no interior do módulo.
No TypeScript, existe módulos internos e externos.
Nós já utilizamos o módulo interno, de forma implícita. Quando não especificamos um módulo explicitamente. O TypeScript adiciona ao módulo “window”.
Vamos ver um exemplo um exemplo de módulo interno nomeado.

module Tenant {
    export class Product {
        name: string;
        price: number;

    constructor(name: string, price: number) {
            this.name = name;
            this.price = price;
        }

        getPriceWithDiscount(): number {
            var date: Date = new Date();
            var discount: number = 0.10;
            if (date.getDay() == 1 || date.getDay() == 6)
                discount = 0.12;

            return this.price - (this.price * discount);
        }
    }
}

window.onload = () => {
    var product: Tenant.Product = new Tenant.Product("Table", 100.10);
    console.log("Preço da mesa", product.getPriceWithDiscount());
};

No exemplo acima, modificamos um exemplo de um post anterior. Com a diferença, que agora a classe “Product” está envolta de um módulo interno chamado “Tenant”. Também adicionamos a palavra chave “export” antes de “class” da classe “Product”, isso é necessário quando desejamos expor a classe, para se utilizada, fora do módulo, caso contrário, ela não ficará visível. E por fim, adicionamos o nome do módulo, ao chamar a classe “Product”, chamando sua referencia assim “Tenant.Product”, em vez de somente “Product”.
É comum separar os módulos em arquivos separados. Não se esqueça de referenciar os arquivos de módulos, para que seja possível localizar seus membros, que estão denotados com “export”.

Continue lendo em TypeScript – Generics.

Espero ter ajudado!
Até a próxima!