Fácil TypeScript

Criando um type alias para Livro

Enunciado

Crie um type alias chamado Livro que represente um livro com as propriedades:

  • titulo: string (obrigatória)
  • autor: string (obrigatória)
  • anoPublicacao: number (opcional)

Depois, crie uma função descreverLivro que receba um Livro e retorne uma string no formato: "Título: {titulo}, Autor: {autor}, Ano: {anoPublicacao}". Se anoPublicacao não for fornecido, use "Ano: desconhecido".

Requisitos

  • Definir o type alias Livro com as propriedades especificadas.
  • A propriedade anoPublicacao deve ser opcional.
  • A função descreverLivro deve tratar a ausência de anoPublicacao.
  • A saída deve seguir exatamente o formato pedido.

Código inicial

// Defina o type alias Livro e a função descreverLivro

type Livro = {
  // complete aqui
};

function descreverLivro(livro: Livro): string {
  // complete aqui
}

// Teste
const livro1: Livro = { titulo: 'Dom Casmurro', autor: 'Machado de Assis', anoPublicacao: 1899 };
const livro2: Livro = { titulo: 'O Hobbit', autor: 'J.R.R. Tolkien' };

console.log(descreverLivro(livro1));
console.log(descreverLivro(livro2));

Saída esperada

Título: Dom Casmurro, Autor: Machado de Assis, Ano: 1899
Título: O Hobbit, Autor: J.R.R. Tolkien, Ano: desconhecido
Ver dica

Use ? para tornar anoPublicacao opcional. Na função, verifique se anoPublicacao é undefined com um if ou use o operador ??.

Mostrar solução
type Livro = {
  titulo: string;
  autor: string;
  anoPublicacao?: number; // opcional
};

function descreverLivro(livro: Livro): string {
  const ano = livro.anoPublicacao !== undefined ? livro.anoPublicacao : 'desconhecido';
  return `Título: ${livro.titulo}, Autor: ${livro.autor}, Ano: ${ano}`;
}

// Teste
const livro1: Livro = { titulo: 'Dom Casmurro', autor: 'Machado de Assis', anoPublicacao: 1899 };
const livro2: Livro = { titulo: 'O Hobbit', autor: 'J.R.R. Tolkien' };

console.log(descreverLivro(livro1));
console.log(descreverLivro(livro2));

Passo a passo

  1. Definimos o type alias Livro com as propriedades titulo e autor obrigatórias e anoPublicacao opcional (marcada com ?).
  2. A função descreverLivro recebe um parâmetro do tipo Livro e retorna uma string.
  3. Dentro da função, verificamos se anoPublicacao está definido. Se sim, usamos seu valor; caso contrário, usamos a string 'desconhecido'.
  4. Construímos a string final usando template literals, interpolando os valores.
  5. Criamos dois objetos de exemplo: um com anoPublicacao e outro sem.
  6. Chamamos a função para cada objeto e imprimimos o resultado no console.

Por que funciona

O type alias Livro define a forma do objeto, garantindo que as propriedades obrigatórias estejam presentes e que a opcional possa ser omitida. A verificação de undefined permite tratar a ausência da propriedade de forma segura, evitando erros de compilação ou resultados inesperados.

Erros comuns

  • Esquecer o ? em anoPublicacao: se declarar anoPublicacao: number, o TypeScript exigirá que todo objeto Livro tenha essa propriedade, causando erro ao criar livro2.
  • Acessar anoPublicacao sem verificar: se fizer livro.anoPublicacao.toString(), o TypeScript reclamará que o valor pode ser undefined. Use ?. ou verifique antes.
  • Confundir ? com valor padrão: ? apenas permite ausência; não define um valor padrão. É preciso tratar na lógica.

Outra forma de resolver

Usar o operador de coalescência nula (??):

const ano = livro.anoPublicacao ?? 'desconhecido';

É mais conciso e preferível quando se quer um valor padrão para undefined ou null.

Saída esperada

Título: Dom Casmurro, Autor: Machado de Assis, Ano: 1899
Título: O Hobbit, Autor: J.R.R. Tolkien, Ano: desconhecido