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.ts deve declarar o módulo calculadora com a função multiplicar tipada.
  • O arquivo app.ts deve importar multiplicar de calculadora e 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

  1. Criamos o arquivo calculadora.d.ts para descrever a biblioteca JavaScript existente.
  2. Usamos declare module 'calculadora' para declarar um módulo externo chamado calculadora.
  3. Dentro do módulo, exportamos a função multiplicar com seus tipos: recebe dois number e retorna number.
  4. No arquivo app.ts, importamos multiplicar do módulo calculadora.
  5. 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 usar export, 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.ts declarar declare 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