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:
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:
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
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.
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
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.
Mostrar dica
Use declarar global { interface Window {config: Record<string, string>; } }.
Solução disponível após 3 tentativas