Fácil TypeScript

Exportando e importando tipos

Enunciado

Crie dois módulos: geometria.ts e main.ts. No primeiro, exporte uma função areaQuadrado(lado: number): number e um tipo Lado = number. No segundo, importe o tipo usando import type e a função normalmente, e use ambos para calcular a área de um quadrado de lado 5.

Requisitos

  • O arquivo geometria.ts deve exportar a função areaQuadrado e o tipo Lado.
  • O arquivo main.ts deve importar Lado com import type e areaQuadrado com import normal.
  • O programa deve imprimir a área calculada.

Código inicial

// geometria.ts
// TODO: exporte a função areaQuadrado e o tipo Lado

// main.ts
// TODO: importe o tipo Lado com import type e a função areaQuadrado
// TODO: calcule a área de um quadrado de lado 5 e imprima

Saída esperada

25
Ver dica

Lembre-se: import type só pode importar tipos. Use export type para exportar o tipo.

Mostrar solução
// geometria.ts
export type Lado = number;

export function areaQuadrado(lado: Lado): number {
  return lado * lado;
}
// main.ts
import type { Lado } from './geometria';
import { areaQuadrado } from './geometria';

const lado: Lado = 5;
console.log(areaQuadrado(lado));

Passo a passo

  1. No arquivo geometria.ts, exportamos o tipo Lado usando export type. Isso permite que outros módulos importem esse tipo.
  2. Também exportamos a função areaQuadrado, que recebe um parâmetro do tipo Lado e retorna a área.
  3. No arquivo main.ts, importamos o tipo Lado com import type. Isso deixa claro que é apenas um tipo e será removido na compilação.
  4. Importamos a função areaQuadrado com import normal, pois é um valor que existe em tempo de execução.
  5. Declaramos uma constante lado do tipo Lado com valor 5.
  6. Chamamos areaQuadrado(lado) e imprimimos o resultado, que é 25.

Por que funciona

O TypeScript separa o espaço de tipos do espaço de valores. import type só pode importar tipos e é apagado no JavaScript gerado. Já import normal importa valores. Como a função areaQuadrado é um valor, ela é importada normalmente. O tipo Lado é usado apenas para checagem estática.

Erros comuns

  • Usar import type para importar a função: import type { areaQuadrado } from './geometria' causaria erro de compilação, pois areaQuadrado é um valor, não um tipo.
  • Esquecer de exportar o tipo: se Lado não for exportado, o import type falhará com erro "Module has no exported member 'Lado'".
  • Usar import normal para o tipo: import { Lado } from './geometria' funciona, mas é menos explícito e pode gerar código desnecessário se o tipo for usado apenas em anotações.

Outra forma de resolver

Se você não quiser usar import type, pode importar tudo normalmente:

import { Lado, areaQuadrado } from './geometria';

Isso é preferível quando você não se importa com a remoção de tipos ou quando está em um projeto que não exige importsNotUsedAsValues.

Saída esperada

25