DEV Community

Cover image for Namespaces e Módulos em TypeScript
Levy Henrique Alves Nunes
Levy Henrique Alves Nunes

Posted on

Namespaces e Módulos em TypeScript

Namespaces e módulos são dois conceitos em TypeScript que ajudam a organizar e modularizar seu código. Embora ambos tenham propósitos semelhantes, eles têm características e casos de uso distintos.

Namespaces

Namespaces, anteriormente conhecidos como "módulos internos", são um meio de agrupar uma coleção relacionada de detalhes sob um único nome.

Como estruturar seu código com Namespaces:

namespace MeuNamespace {
    export class MinhaClasse {
        // Implementação da classe
    }

    export interface MinhaInterface {
        // Definição da interface
    }
}
Enter fullscreen mode Exit fullscreen mode

Para usar elementos dentro do namespace, você precisa prefixar com o nome do namespace:

const minhaInstancia = new MeuNamespace.MinhaClasse();
Enter fullscreen mode Exit fullscreen mode

Namespaces aninhados

Namespaces podem ser aninhados para uma organização ainda mais detalhada:

namespace MeuNamespace {
    export namespace SubNamespace {
        export class MinhaSubClasse {
            // Implementação da classe
        }
    }
}
Enter fullscreen mode Exit fullscreen mode

Módulos

Ao contrário dos namespaces, os módulos em TypeScript correspondem mais estreitamente ao módulo ES6 em JavaScript. Eles não adicionam qualquer valor ao escopo global e são mais adaptáveis às técnicas modernas de empacotamento e carregamento de módulos, como CommonJS e AMD.

Como estruturar seu código com Módulos:

Num arquivo meuModulo.ts:

export class MinhaClasse {
    // Implementação da classe
}

export interface MinhaInterface {
    // Definição da interface
}
Enter fullscreen mode Exit fullscreen mode

Para usar elementos de um módulo, você importa eles:

import { MinhaClasse, MinhaInterface } from './meuModulo';
Enter fullscreen mode Exit fullscreen mode

Importação e Exportação de Módulos Avançados:

Exportando como alias

class ClasseInterna {
    // Implementação
}

export { ClasseInterna as MinhaClasseExportada };
Enter fullscreen mode Exit fullscreen mode

Importação com alias

Se houver conflitos de nome ou se o nome for muito longo, você pode usar um alias:

import { MinhaClasseExportada as AliasDeClasse } from './meuModulo';
Enter fullscreen mode Exit fullscreen mode

Importando tudo

import * as TodoMeuModulo from './meuModulo';

const minhaInstancia = new TodoMeuModulo.MinhaClasse();
Enter fullscreen mode Exit fullscreen mode

Exportações padrão

Cada módulo pode ter no máximo uma exportação padrão:

export default class MinhaClassePadrao {
    // Implementação
}
Enter fullscreen mode Exit fullscreen mode

Importando uma exportação padrão:

import MinhaClasse from './meuModulo';
Enter fullscreen mode Exit fullscreen mode

Conclusão

Enquanto namespaces são ótimos para organizar código interno em grandes bases de código TypeScript, módulos são mais alinhados com o ecossistema moderno JavaScript e se adaptam bem com sistemas de carregamento e empacotamento de módulos. Com a crescente adoção de ES6+ e ferramentas como Webpack e Rollup, usar módulos tornou-se a prática padrão recomendada.

Sentry blog image

How to reduce TTFB

In the past few years in the web dev world, we’ve seen a significant push towards rendering our websites on the server. Doing so is better for SEO and performs better on low-powered devices, but one thing we had to sacrifice is TTFB.

In this article, we’ll see how we can identify what makes our TTFB high so we can fix it.

Read more

Top comments (0)

Cloudinary image

Video API: manage, encode, and optimize for any device, channel or network condition. Deliver branded video experiences in minutes and get deep engagement insights.

Learn more

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay