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.tsdeve exportar a funçãoareaQuadradoe o tipoLado. - O arquivo
main.tsdeve importarLadocomimport typeeareaQuadradocomimportnormal. - 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
- No arquivo
geometria.ts, exportamos o tipoLadousandoexport type. Isso permite que outros módulos importem esse tipo. - Também exportamos a função
areaQuadrado, que recebe um parâmetro do tipoLadoe retorna a área. - No arquivo
main.ts, importamos o tipoLadocomimport type. Isso deixa claro que é apenas um tipo e será removido na compilação. - Importamos a função
areaQuadradocomimportnormal, pois é um valor que existe em tempo de execução. - Declaramos uma constante
ladodo tipoLadocom valor 5. - 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 typepara importar a função:import type { areaQuadrado } from './geometria'causaria erro de compilação, poisareaQuadradoé um valor, não um tipo. - Esquecer de exportar o tipo: se
Ladonão for exportado, oimport typefalhará com erro "Module has no exported member 'Lado'". - Usar
importnormal 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