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 aulaLoadState<Task[]>
Execute um cenário
Discriminante
Estado atual
Nenhum payload disponível
O membro idle não possui data nem message.
Narrowing executado
Branch selecionado
case "idle": // state.status === "idle"
state.data- indisponível
state.message- indisponível
Contrato reutilizá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 };
}