declare no TypeScript: para que serve e como usar

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Por que o TypeScript precisa da palavra-chave declare?

\n

Imagine que você está construindo uma casa, mas alguns cômodos já existem — foram construídos por outra pessoa (por exemplo, uma biblioteca JavaScript). Você não pode entrar lá e reformar as paredes, mas precisa conhecer a planta deles para posicionar os móveis corretamente. Esse é exatamente o papel da palavra-chave declare no TypeScript.

\n\n

Se você já trabalhou com bibliotecas populares (jQuery, Lodash, D3.js), com certeza já se deparou com arquivos .d.ts — são essas "plantas" criadas com declare. Neste artigo, vamos entender o que é declare, para que serve e como usá-lo na prática. Prepare-se: vai ter bastante código e pouca enrolação.

\n\n

O que é declare no TypeScript?

\n

declare é uma palavra-chave que informa ao compilador TypeScript: "Ei, essa coisa (variável, função, classe ou módulo) existe, mas está definida em outro lugar. Apenas confie em mim e deixe eu usá-la no código."

\n\n

É importante entender: declare não gera nenhum código JavaScript. É uma construção puramente informativa para o compilador. Se você escrever declare const x: number = 5, após a compilação o x desaparecerá — ele não estará no arquivo final.

\n\n

Quando usar?

\n
    \n
  • Trabalhando com variáveis globais — como window, document ou variáveis adicionadas via CDN.
  • \n
  • Tipagem de bibliotecas JavaScript — quando a biblioteca é escrita em JS puro, mas você quer usá-la com TypeScript.
  • \n
  • Criação de tipos para arquivos de configuração — módulos CSS, imagens, arquivos JSON.
  • \n
\n\n

Sintaxe do declare: exemplos básicos

\n\n

1. Declaração de variáveis

\n

Suponha que você tenha uma variável global VERSION, definida no arquivo HTML via <script>. O TypeScript não sabe nada sobre ela, então você escreve:

\n
declare const VERSION: string;\n\nconsole.log(VERSION); // OK, TypeScript sabe que é uma string\n
\n

Após a compilação, declare const VERSION: string desaparece, mas console.log(VERSION) permanece.

\n\n

2. Declaração de funções

\n

Imagine que você tem uma função global trackEvent de analytics:

\n
declare function trackEvent(eventName: string, properties?: Record<string, any>): void;\n\n// Uso\ntrackEvent("button_click", { buttonId: "submit" });\n
\n

O compilador não vai verificar a implementação — ele apenas conhece a assinatura.

\n\n

3. Declaração de classes

\n

Uma biblioteca fornece a classe Moment no espaço de nomes global:

\n
declare class Moment {\n    constructor(date: string);\n    format(pattern: string): string;\n}\n\n// Uso\nconst now = new Moment("2024-01-01");\nconsole.log(now.format("YYYY-MM-DD"));\n
\n\n

4. Declaração de módulos

\n

Este é o cenário mais comum. Por exemplo, módulos CSS ou arquivos JSON:

\n
// styles.d.ts\ndeclare module "*.css" {\n    const styles: Record<string, string>;\n    export default styles;\n}\n\n// images.d.ts\ndeclare module "*.png" {\n    const src: string;\n    export default src;\n}\n
\n

Agora você pode importar CSS e imagens sem erros no TypeScript.

\n\n

declare e arquivos .d.ts

\n

Arquivos com extensão .d.ts (declarações de tipos) são o "habitat natural" da palavra-chave declare. Eles contêm apenas declarações e não são compilados para JavaScript. Geralmente ficam na pasta types/ ou são fornecidos junto com a biblioteca (ex.: @types/lodash).

\n\n

Exemplo: criando tipos para jQuery

\n

Blogs

Book Recommendations