Módulo 3 · Aula 3.3

Biblioteca de estados

Use uma discriminated union para permitir somente estados coerentes e um generic para preservar o payload.

Voltar para a aula

Execute um cenário

Estado atual

idle

A operação ainda não foi iniciada.

Nenhum payload disponível O membro idle não possui data nem message.

Branch selecionado

case "idle":
  // state.status === "idle"
state.data
indisponível
state.message
indisponível

Generic + discriminated union

type LoadState<TData> =
  | { status: "idle" }
  | { status: "loading" }
  | { status: "success"; data: TData }
  | { status: "empty" }
  | { status: "error"; message: string };

function success<TData>(data: TData): LoadState<TData> {
  return { status: "success", data };
}