Pular para o conteúdo principal
Módulo 7 · Lição 2 de 214/14 no curso~15 min
Lições do módulo (2/2)

Declarações e fusão

Arquivos de declaração de tipo (com extensão .d.ts) são usados ​​em TypeScript para descrever a forma do código JavaScript existente sem implementar qualquer lógica real. Eles contêm apenas definições de tipo, interfaces e assinaturas de funções.

Esses arquivos são essenciais ao usar bibliotecas de terceiros escritas em JavaScript puro.


Mesclagem de declarações

Mesclagem de declarações é um comportamento em que o compilador mescla duas ou mais declarações separadas declaradas com o mesmo nome em uma única definição.

O caso mais comum é a fusão de interface:

TS
interface User {
  name: string;
}

interface User {
  age: number;
}

// The resulting User interface has both name and age properties!
const student: User = {
  name: 'Alice',
  age: 23,
};

Se as propriedades compartilharem o mesmo nome, elas deverão ser do mesmo tipo, caso contrário, o TypeScript reportará um erro.


Modificando Módulos Globais e Externos

Podemos usar a fusão de declarações para estender interfaces definidas em outros módulos ou no escopo global.

Por exemplo, se quisermos adicionar uma propriedade ao objeto window global do navegador:

TS
declare global {
  interface Window {
    analyticsToken: string;
  }
}

Ao usar declare global, informamos ao TypeScript que estamos injetando uma nova assinatura na interface Window global existente.


Experimente você mesmo

Exercício 1: Mesclagem de declarações básicas

Exercício#ts.m7.l2.e1
Tentativas: 0Carregando…

No TypeScript, interfaces com o mesmo nome no mesmo escopo são mescladas automaticamente. Declare uma interface User com a propriedade name: string, depois em um segundo bloco declare a mesma interface User adicionando a propriedade age: number. Finalmente, declare um usuário constante do tipo User com valores apropriados.

Carregando editor…
Mostrar dica

Declare a interface User duas vezes, inserindo as respectivas propriedades, e em seguida atribua os campos ao objeto usuário.

Solução disponível após 3 tentativas

Exercício 2: Estendendo a Interface da Janela Global

Exercício#ts.m7.l2.e2
Tentativas: 0Carregando…

Imagine que você deseja estender a interface global do Window para adicionar uma propriedade customizada chamada config do tipo Record<string, string>. Escreva a declaração correta usando declare global para mesclar a nova propriedade na interface global da janela.

Carregando editor…
Mostrar dica

Use declarar global { interface Window {config: Record<string, string>; } }.

Solução disponível após 3 tentativas