Trabalhando com namespaces TypeScript

Os namespaces TypeScript fornecem uma maneira de organizar e gerenciar código dentro de um único escopo global. Os namespaces ajudam a agrupar códigos relacionados, evitando conflitos de nomenclatura e melhorando a manutenibilidade do código. Este guia aborda os conceitos básicos de criação e uso de namespaces TypeScript com exemplos.

O que são namespaces TypeScript?

Namespaces são uma maneira de encapsular código em TypeScript. Eles permitem agrupar funções, classes e variáveis ​​relacionadas em uma única unidade lógica, o que pode ser útil em projetos grandes para evitar colisões de nomes e melhorar a organização do código.

Criando um namespace

Para criar um namespace, use a palavra-chave namespace seguida por um nome e um bloco de código. Dentro do bloco namespace, defina as funções, classes ou variáveis ​​que devem fazer parte desse namespace.

// mathUtils.ts

namespace MathUtils {
  export function add(a: number, b: number): number {
    return a + b;
  }

  export function subtract(a: number, b: number): number {
    return a - b;
  }
}

Neste exemplo, o namespace MathUtils contém duas funções, add e subtract, ambas exportadas para uso fora do namespace.

Usando um namespace

Para usar o código dentro de um namespace, prefixe o nome do namespace seguido por um ponto e o nome do membro. Certifique-se de que o namespace esteja disponível no escopo em que está sendo usado.

// app.ts

/// <reference path="mathUtils.ts" /> 

const sum = MathUtils.add(5, 3);
const difference = MathUtils.subtract(5, 3);

console.log(`Sum: ${sum}`);
console.log(`Difference: ${difference}`);

Neste exemplo, o namespace MathUtils é referenciado usando uma diretiva de barra tripla '<reference path="mathUtils.ts" />', permitindo acesso às suas funções no arquivo app.ts.

Espaços de nomes aninhados

Namespaces podem ser aninhados dentro de outros namespaces, o que ajuda a organizar melhor o código. Namespaces aninhados são acessados ​​encadeando os nomes dos namespaces com pontos.

// shapes.ts

namespace Shapes {
  export namespace Circle {
    export function area(radius: number): number {
      return Math.PI * radius * radius;
    }
  }

  export namespace Square {
    export function area(side: number): number {
      return side * side;
    }
  }
}

Neste exemplo, o namespace Shapes contém dois namespaces aninhados: Circle e Square, cada um com sua própria função area.

Usando namespaces aninhados

Para acessar membros de namespaces aninhados, use a notação de ponto para encadear os nomes dos namespaces.

// app.ts

/// <reference path="shapes.ts" /> 

const circleArea = Shapes.Circle.area(5);
const squareArea = Shapes.Square.area(4);

console.log(`Circle Area: ${circleArea}`);
console.log(`Square Area: ${squareArea}`);

Neste exemplo, os namespaces Circle e Square são acessados ​​por meio do namespace Shapes, demonstrando como namespaces aninhados podem ser utilizados.

Conclusão

Os namespaces TypeScript são uma ferramenta poderosa para organizar e gerenciar código. Ao usar namespaces, o código pode ser agrupado logicamente, reduzindo o risco de conflitos de nomenclatura e melhorando a manutenibilidade. Entender como criar e usar namespaces, incluindo namespaces aninhados, é essencial para o desenvolvimento efetivo do TypeScript.