XState: máquinas de estados tipadas
Modele máquinas de estados com TypeScript no XState
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 inspectorRecapitulaçã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.
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
- Tipando slices e thunks do Redux Toolkit
- Padrões de tipagem de stores Zustand
- XState: máquinas de estados tipadas
- Estado derivado e seletores com tipos