TypeScript Academy · Aula

XState: máquinas de estados tipadas

Modele máquinas de estados com TypeScript no XState

Aula 3 de 413 etapas

XState: máquinas de estados tipadas é uma aula grátis de TypeScript Academy no CoddyKit. Esta é a aula 3 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de TypeScript Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de TypeScript Academy inclui 4 aulas no total.

Por que usar XState com TypeScript?

O XState modela o state da aplicação como state machines explícitas. Com TypeScript, states, eventos e contexto são totalmente tipados, impedindo transições de state inválidas em tempo de compilação.

import { createMachine, assign } from "xstate";

Definindo os tipos da machine

O XState v5 usa parâmetros de tipo para contexto, eventos e states. Defina-os antes de criar a machine.

type TrafficContext = { count: number };
type TrafficEvent =
  | { type: "TURN_GREEN" }
  | { type: "TURN_YELLOW" }
  | { type: "TURN_RED" };

Criando uma machine tipada

Passe seus tipos de contexto e evento para createMachine para obter verificação completa dos tipos de states e transições.

const trafficMachine = createMachine({
  types: {} as { context: TrafficContext; events: TrafficEvent },
  id: "traffic",
  initial: "red",
  context: { count: 0 },
  states: {
    red:    { on: { TURN_GREEN: "green" } },
    green:  { on: { TURN_YELLOW: "yellow" } },
    yellow: { on: { TURN_RED: "red" } },
  },
});

Contexto tipado com assign

Use assign para atualizar o contexto — o TypeScript garante que o contexto parcial retornado corresponda ao tipo definido.

const machine = createMachine({
  types: {} as { context: TrafficContext; events: TrafficEvent },
  // ...
  entry: assign({ count: 0 }),
  on: {
    TURN_GREEN: {
      actions: assign(({ context }) => ({ count: context.count + 1 })),
    },
  },
});

Usando a machine no React

O gancho useMachine de @xstate/react retorna state e função de envio tipados.

import { useMachine } from "@xstate/react";

function TrafficLight() {
  const [state, send] = useMachine(trafficMachine);
  // state.value: "red" | "green" | "yellow"
  // send: (event: TrafficEvent) => void
  return <button onClick={() => send({ type: "TURN_GREEN" })}>Go</button>;
}

Guardas tipadas

As funções de guarda recebem contexto e evento tipados, garantindo que as condições sejam verificadas com os tipos corretos.

const machine = createMachine({
  types: {} as { context: TrafficContext; events: TrafficEvent },
  states: {
    red: {
      on: {
        TURN_GREEN: {
          guard: ({ context }) => context.count < 10, // context: TrafficContext
          target: "green",
        },
      },
    },
  },
});

Ações tipadas

As ações nomeadas podem ser tipadas declarando-as na configuração da machine e implementando-as por meio de setup.

import { setup } from "xstate";
const machine = setup({
  types: {} as { context: TrafficContext; events: TrafficEvent },
  actions: {
    logTransition: ({ context, event }) => {
      console.log(context.count, event.type);
    },
  },
}).createMachine({ /* ... */ });

Estados paralelos

O XState oferece suporte a regiões paralelas (ortogonais). O TypeScript acompanha os valores de state dos states paralelos como objetos.

states: {
  ui: {
    type: "parallel",
    states: {
      modal: { initial: "closed", states: { closed: {}, open: {} } },
      tooltip: { initial: "hidden", states: { hidden: {}, visible: {} } },
    },
  },
}

Correspondência de state

Use state.matches() para verificar o state atual — o XState tipa isso para nomes de state conhecidos.

const [state] = useMachine(trafficMachine);
if (state.matches("green")) {
  // TypeScript knows we're in the green state
}

Inspetor do XState

Conecte o Inspetor do XState para depuração visual de state machines durante o desenvolvimento, sem perder a segurança de tipos no código de produção.

import { inspect } from "@xstate/inspect";
inspect({ iframe: false }); // opens state machine inspector

Recapitulação: tipagem do XState

As machines tipadas do XState definem tipos de contexto e eventos, usam assign para atualizações tipadas de contexto e integram-se ao React por meio de useMachine para obter state e envio de eventos totalmente tipados.

Verificação rápida

O que a propriedade types na configuração de machine do XState v5 faz?

O que você aprendeu

O XState com TypeScript oferece state machines totalmente tipadas: defina tipos de contexto e eventos, use assign para atualizações tipadas, condições de guarda e ações. O gancho useMachine fornece state e envio tipados nos componentes React.

Grátis para começar

Aprenda TypeScript com um tutor de IA — grátis

Escreva e execute código real no seu navegador, obtenha ajuda instantânea de um tutor de IA 24/7 e continue de onde parou na web ou no app.

Cursos
101
Aulas
352

Perguntas Frequentes

A aula “XState: máquinas de estados tipadas” é grátis?

Sim — o texto completo de “XState: máquinas de estados tipadas” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de TypeScript Academy, atualize para CoddyKit PRO. O curso de TypeScript Academy inclui 4 aulas no total.

O que vou aprender em “XState: máquinas de estados tipadas”?

Modele máquinas de estados com TypeScript no XState Você pratica TypeScript Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar TypeScript Academy?

Nenhuma experiência prévia é necessária. TypeScript Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 3 de 4.

Quanto tempo leva a aula “XState: máquinas de estados tipadas”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de TypeScript Academy?

Sim. Cada aula de TypeScript Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. Tipando slices e thunks do Redux Toolkit
  2. Padrões de tipagem de stores Zustand
  3. XState: máquinas de estados tipadas
  4. Estado derivado e seletores com tipos
← Voltar para TypeScript Academy