Da trilha de TypeScript Este conceito ainda não saiu como card do dia. ir para o card de hoje

TypeScript Tipos Básico

Objetos e type aliases

Em TypeScript, podemos descrever a forma de um objeto usando tipos de objeto ou type aliases. Um tipo de objeto especifica quais propriedades um objeto deve ter e seus respectivos tipos. Por exemplo, { nome: string; idade: number } define que um objeto precisa ter nome (string) e idade (number).

Podemos tornar propriedades opcionais adicionando ? após o nome: { nome: string; idade?: number }. Isso significa que a propriedade pode estar ausente ou ser undefined. Também podemos marcar propriedades como readonly, impedindo que sejam modificadas após a criação do objeto.

Para evitar repetir o mesmo tipo de objeto várias vezes, usamos type aliases com a palavra-chave type. Por exemplo, type Pessoa = { nome: string; idade?: number }. Isso cria um nome reutilizável para o tipo, deixando o código mais limpo e fácil de manter.

Neste card, vamos explorar esses conceitos com exemplos práticos e exercícios que reforçam o uso de tipos de objeto, propriedades opcionais, readonly e type.

Pontos-chave

  • Tipos de objeto definem a forma esperada de um objeto, listando propriedades e seus tipos.
  • Propriedades opcionais são marcadas com ? e podem estar ausentes ou ser undefined.
  • readonly impede a modificação de uma propriedade após a criação do objeto.
  • type cria um alias reutilizável para qualquer tipo, incluindo tipos de objeto.
  • TypeScript verifica a estrutura do objeto em tempo de compilação, mas não em tempo de execução.
objetos_type_aliases.ts
// Exemplo: tipos de objeto, propriedades opcionais, readonly e type alias

type Pessoa = {
  readonly id: number;      // readonly: não pode ser alterado depois
  nome: string;
  idade?: number;           // opcional: pode ser omitido
  email?: string;
};

function apresentar(pessoa: Pessoa): string {
  const idade = pessoa.idade ?? 'não informada';
  const email = pessoa.email ?? 'não informado';
  return `ID: ${pessoa.id}, Nome: ${pessoa.nome}, Idade: ${idade}, Email: ${email}`;
}

const pessoa1: Pessoa = {
  id: 1,
  nome: 'Ana',
  idade: 28
};

const pessoa2: Pessoa = {
  id: 2,
  nome: 'Bruno',
  email: 'bruno@exemplo.com'
};

console.log(apresentar(pessoa1));
console.log(apresentar(pessoa2));

// pessoa1.id = 10; // Erro: Cannot assign to 'id' because it is a read-only property.
// pessoa2.idade = 30; // Erro: Property 'idade' does not exist on type 'Pessoa'? Não, idade existe mas é opcional.
// Na verdade, pessoa2.idade é opcional, então atribuir é permitido se o tipo for compatível.
// Vamos demonstrar um erro de compilação comentado:
// const pessoa3: Pessoa = { nome: 'Carlos' }; // Erro: Property 'id' is missing.

Exercícios

  1. 1
    Fácil

    Criando um type alias para Livro

    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".

    Resolver
  2. 2
    Médio

    Configuração com readonly e opcionais

    Crie um type alias Configuracao que represente as configurações de um aplicativo com:

    • nome: string (readonly)
    • versao: number (readonly)
    • debug: boolean (opcional)
    • porta: number (opcional)

    Depois, crie uma função exibirConfiguracao que receba um Configuracao e retorne uma string no formato: "Nome: {nome}, Versão: {versao}, Debug: {debug}, Porta: {porta}". Se debug não for fornecido, use false. Se porta não for fornecida, use 3000.

    Além disso, tente modificar a propriedade nome de um objeto Configuracao e observe o erro de compilação (comente a linha).

    Resolver
  3. 3
    Desafio

    Sistema de biblioteca com tipos e readonly

    Crie um type alias Livro com:

    • isbn: string (readonly)
    • titulo: string
    • autor: string
    • anoPublicacao: number (opcional)
    • disponivel: boolean (opcional, padrão true)

    Crie um type alias Biblioteca que seja um array de Livro.

    Implemente as funções:

    • adicionarLivro(biblioteca: Biblioteca, livro: Livro): Biblioteca — retorna uma nova biblioteca com o livro adicionado (não modifique o array original).
    • buscarLivroPorIsbn(biblioteca: Biblioteca, isbn: string): Livro | undefined — retorna o livro com o ISBN correspondente ou undefined.
    • listarLivrosDisponiveis(biblioteca: Biblioteca): string[] — retorna um array com os títulos dos livros disponíveis (considerando disponivel padrão true).

    Teste criando uma biblioteca, adicionando livros, buscando por ISBN e listando disponíveis.

    Resolver

Continue estudando