Médio TypeScript
Criando um arquivo de declaração .d.ts
Enunciado
Você tem uma biblioteca JavaScript chamada calculadora.js que exporta uma função multiplicar(a, b). Crie um arquivo de declaração calculadora.d.ts que descreva essa função. Depois, crie um arquivo app.ts que importe e use multiplicar para calcular 6 * 7 e imprimir o resultado.
Requisitos
- O arquivo
calculadora.d.tsdeve declarar o módulocalculadoracom a funçãomultiplicartipada. - O arquivo
app.tsdeve importarmultiplicardecalculadorae usá-la. - O programa deve imprimir o resultado da multiplicação.
Código inicial
// calculadora.d.ts
// TODO: declare o módulo 'calculadora' com a função multiplicar
// app.ts
// TODO: importe multiplicar e calcule 6 * 7
Saída esperada
42
Ver dica
Use declare module 'calculadora' { ... } e exporte a função com tipos.
Mostrar solução
// calculadora.d.ts
declare module 'calculadora' {
export function multiplicar(a: number, b: number): number;
}
// app.ts
import { multiplicar } from 'calculadora';
console.log(multiplicar(6, 7));
Passo a passo
- Criamos o arquivo
calculadora.d.tspara descrever a biblioteca JavaScript existente. - Usamos
declare module 'calculadora'para declarar um módulo externo chamadocalculadora. - Dentro do módulo, exportamos a função
multiplicarcom seus tipos: recebe doisnumbere retornanumber. - No arquivo
app.ts, importamosmultiplicardo módulocalculadora. - Chamamos
multiplicar(6, 7)e imprimimos o resultado, que é 42.
Por que funciona
O arquivo .d.ts fornece informações de tipo para o compilador TypeScript sem gerar código JavaScript. Quando importamos de 'calculadora', o compilador encontra a declaração e verifica se o uso está correto. Em tempo de execução, o JavaScript real da biblioteca é usado.
Erros comuns
- Esquecer de exportar a função no
.d.ts: se não usarexport, a função não estará disponível para importação. - Tipos incorretos: se declarar
multiplicar(a: string, b: string): string, o uso com números dará erro de compilação. - Nome do módulo errado: se o arquivo
.d.tsdeclarardeclare module 'calc', mas o import for de'calculadora', o TypeScript não encontrará a declaração.
Outra forma de resolver
Você pode usar export = para módulos CommonJS:
declare module 'calculadora' {
function multiplicar(a: number, b: number): number;
export = multiplicar;
}
E importar com import multiplicar = require('calculadora'). Isso é útil para bibliotecas antigas.
Saída esperada
42