Médio JavaScript

Exportação padrão e nomeada juntas

Enunciado

Crie um módulo calculadora.mjs que exporta uma função padrão somar(a, b) e também exporta uma constante nomeada VERSAO = '1.0'. Em app.mjs, importe ambas e exiba "Versão 1.0: 2 + 3 = 5".

Requisitos

  • O módulo deve ter export default para a função somar.
  • O módulo deve ter export const VERSAO = '1.0'.
  • O arquivo app.mjs deve importar a função padrão e a constante nomeada.
  • A saída deve ser exatamente Versão 1.0: 2 + 3 = 5.

Código inicial

// calculadora.mjs
// TODO: exporte a função padrão somar e a constante VERSAO

// app.mjs
// TODO: importe e use ambos

Saída esperada

Versão 1.0: 2 + 3 = 5
Ver dica

No import, a exportação padrão vem antes das chaves: import somar, { VERSAO } from './calculadora.mjs';.

Mostrar solução
// calculadora.mjs
export const VERSAO = '1.0';

export default function somar(a, b) {
  return a + b;
}
// app.mjs
import somar, { VERSAO } from './calculadora.mjs';

const resultado = somar(2, 3);
console.log(`Versão ${VERSAO}: 2 + 3 = ${resultado}`);

Passo a passo

  1. Em calculadora.mjs, declaramos export const VERSAO = '1.0'; — uma exportação nomeada de uma constante.
  2. Em seguida, export default function somar(a, b) { return a + b; } define a exportação padrão do módulo.
  3. No app.mjs, a linha import somar, { VERSAO } from './calculadora.mjs'; importa a exportação padrão (sem chaves) e a nomeada (com chaves).
  4. Calculamos somar(2, 3) e armazenamos em resultado.
  5. Usamos template literal para montar a string final e console.log para exibir.

Por que funciona

Um módulo pode ter várias exportações nomeadas e uma exportação padrão. A sintaxe de import combina as duas: o primeiro identificador (sem chaves) recebe o default, e os demais entre chaves recebem as exportações nomeadas. O escopo do módulo mantém VERSAO e somar isolados até serem importados.

Erros comuns

  • Colocar a exportação padrão entre chaves: import { somar, VERSAO } — isso gera erro porque somar é default, não nomeada.
  • Tentar ter dois export default no mesmo módulo: export default function a() {}; export default function b() {} — erro de sintaxe.
  • Esquecer de exportar VERSAO: se não tiver export, ela não estará disponível para importação.

Outra forma de resolver

Poderia exportar somar como nomeada (export function somar) e importar import { somar, VERSAO }. A escolha entre default e nomeada depende do estilo do projeto; default é útil para o "principal" do módulo.

Saída esperada

Versão 1.0: 2 + 3 = 5