MB Academy

Planejamento do Projeto: Rastreador de Gastos

Vamos planejar um rastreador de gastos pessoais em TypeScript — um projeto real para o seu portfólio.

Com os fundamentos do curso em mãos, é hora de construir algo que vai além de um exercício: um projeto que você pode apresentar como parte do seu portfólio.

O projeto

Rastreador de Gastos Pessoais — uma aplicação de linha de comando (CLI) em TypeScript para registrar e analisar gastos do dia a dia.

Por que esse projeto é bom para um portfólio?

  • Resolve um problema real que qualquer pessoa entende
  • Demonstra domínio de TypeScript, OOP, arrays e módulos
  • Gera saída visual e organizada no terminal com console.table
  • Pode ser descrito em uma linha: "CLI em TypeScript para rastreamento de gastos pessoais"
  • É extensível: persistência em arquivo, gráficos, orçamento mensal — campo aberto para evoluir

Funcionalidades

  1. Adicionar gasto — com descrição, valor e categoria
  2. Listar gastos — em formato de tabela organizada
  3. Resumo por categoria — quanto foi gasto em cada área
  4. Total gasto — soma de todos os registros
  5. Filtrar por categoria — ver apenas gastos de uma área específica

Modelando os dados

O primeiro passo é definir os tipos que nosso programa vai manipular.

O type Categoria

Um union type garante que apenas categorias válidas sejam usadas — o TypeScript vai acusar erro se você tentar usar uma categoria inexistente:

type Categoria =
  | "alimentação"
  | "transporte"
  | "moradia"
  | "lazer"
  | "saúde"
  | "outros";

A interface Gasto

Cada gasto terá:

  • id — identificador único gerado automaticamente
  • descricao — o que foi gasto
  • valor — quanto custou, em reais
  • categoria — em qual área se encaixa
  • data — quando foi registrado
interface Gasto {
  id: number;
  descricao: string;
  valor: number;
  categoria: Categoria;
  data: string;
}

Arquitetura: separando responsabilidades

Vamos dividir o código em três arquivos, cada um com uma responsabilidade clara:

gastos-cli/
  src/
    tipos.ts        ← interface Gasto e type Categoria
    rastreador.ts   ← classe RastreadorDeGastos com toda a lógica
    index.ts        ← ponto de entrada: cria o rastreador e usa seus métodos
  package.json
  tsconfig.json

Essa separação é o padrão profissional. Você vai entender por que ela importa quando o projeto crescer.

A classe RastreadorDeGastos

A classe central do projeto terá estes métodos:

MétodoO que faz
adicionarGasto(...)Valida e adiciona um gasto ao array
listarGastos()Exibe todos em formato de tabela
resumoPorCategoria()Mostra total gasto por categoria
totalGasto()Retorna a soma de todos os valores
filtrarPorCategoria(cat)Retorna os gastos de uma categoria

Estrutura inicial da classe

class RastreadorDeGastos {
  private gastos: Gasto[] = [];
  private proximoId: number = 1;

  adicionarGasto(descricao: string, valor: number, categoria: Categoria): void {
    // a implementar
  }

  listarGastos(): void {
    // a implementar
  }

  resumoPorCategoria(): void {
    // a implementar
  }

  totalGasto(): number {
    // a implementar
  }

  filtrarPorCategoria(categoria: Categoria): Gasto[] {
    // a implementar
  }
}

O que você vai praticar

Ao construir este projeto, você aplica e revisa:

  • Union types e interfaces — modelar dados do mundo real com precisão
  • Classes e encapsulamento — organizar lógica em uma estrutura coesa
  • Módulos — separar responsabilidades com import/export
  • Array methodspush, filter, reduce, forEach, map
  • Tratamento de erros — validar entradas inválidas com throw

Configurando o ambiente

  1. Crie uma pasta gastos-cli e entre nela
  2. Inicie o projeto:
    npm init -y
  3. Instale as dependências:
    npm install --save-dev typescript ts-node @types/node
  4. Gere o tsconfig.json:
    npx tsc --init
  5. Crie a pasta src com os três arquivos: tipos.ts, rastreador.ts, index.ts
  6. Adicione o script de execução ao package.json:
    {
      "scripts": {
        "start": "ts-node src/index.ts"
      }
    }

Com o planejamento e o ambiente prontos, vamos implementar a lógica na próxima página.