trilha

Tecnologias/01 - Linguagens/02 - TypeScript2 min

Módulos e Configuração do TypeScript

Módulos

Módulos delimitam o que um arquivo expõe e quais dependências ele usa. No formato ESM, export publica declarações e import as consome. CommonJS usa mecanismos como require e module.exports. O ambiente de execução ou a ferramenta de build precisa entender o formato produzido.

// contrato.ts
export interface Produto {
  id: string;
  preco: number;
}
// resumo.ts — exemplo de ESM compilado para JavaScript
import type { Produto } from "./contrato.js";

export function resumo(produto: Produto): string {
  return `${produto.id}: ${produto.preco}`;
}

import type importa apenas informação de tipos e é removido da saída. A extensão .js neste exemplo corresponde ao arquivo emitido para execução; a resolução do TypeScript pode associá-lo ao fonte .ts. Referência: teoria de módulos.

tsconfig.json

O arquivo configura a verificação, a seleção de arquivos e a emissão de código.

Opção Papel
strict Ativa um conjunto de verificações mais rigorosas
target Define o nível de sintaxe JavaScript usado na emissão
module Define o comportamento e formato de módulos
moduleResolution Define como localizar módulos importados
noEmit Verifica sem produzir arquivos JavaScript
noEmitOnError Impede emissão quando há erros reportados
lib Seleciona declarações de APIs que o compilador considera disponíveis

lib não instala APIs no ambiente. target também não fornece automaticamente polyfills. O código pode passar na verificação e chamar uma API ausente no runtime. Referência: TSConfig.

Declarações e dependências

Arquivos .d.ts descrevem APIs para o compilador. A implementação real da biblioteca precisa existir separadamente. Uma declaração não garante que a versão instalada se comporte de acordo com o contrato.

A configuração de módulos deve corresponder ao ambiente: um projeto executado por Node e outro empacotado para navegador podem precisar de configurações diferentes.

Aprofundamento aplicado

Três perguntas para diagnosticar um import

  1. O compilador localiza o código ou apenas uma declaração .d.ts?
  2. Qual caminho e formato aparecem no JavaScript emitido?
  3. O ambiente que executa esse JavaScript consegue resolver esse caminho?

Um alias @dominio/cliente pode funcionar no editor e falhar em produção se somente o TypeScript conhecer seu mapeamento. Configurar a resolução estática não instala um resolvedor no Node nem reescreve necessariamente os imports emitidos. Referência: módulos e host.

Configuração como contrato de execução

Situação Verificação necessária
Bundler produz o artefato O bundler entende imports, aliases e extensões usados
Node executa arquivos emitidos Formato de módulos, extensões e package.json concordam
Biblioteca publicada Entradas de runtime e declarações apontam para arquivos existentes
noEmit no projeto Outra etapa realmente produz ou executa o código

Exercício: compile dois módulos e execute a saída fora do editor, a partir de um diretório limpo. Resultado esperado: nenhum import depende de arquivos-fonte que ficaram fora do artefato. Esse teste revela diferenças entre a experiência no editor e o pacote que será distribuído.

Relacionado: 1. TypeScript · 8. Validação de Dados em TypeScript.


Parte de TypeScript

Buscar

Busca por título, seção e texto das notas