XState: máquinas de estados tipadas
Modele máquinas de estados con TypeScript en XState.
XState: máquinas de estados tipadas es una lección gratuita de TypeScript Academy en CoddyKit. Esta es la lección 3 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de TypeScript Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de TypeScript Academy incluye 4 lecciones en total.
¿Por qué usar XState con TypeScript?
XState modela el estado de la aplicación como máquinas de estados explícitas. Con TypeScript, los estados, los eventos y el contexto están completamente tipados, lo que evita transiciones de estado no válidas en tiempo de compilación.
import { createMachine, assign } from "xstate";Definir los tipos de la máquina
XState v5 usa parámetros de tipo para el contexto, los eventos y los estados. Defínalos antes de crear la máquina.
type TrafficContext = { count: number };
type TrafficEvent =
| { type: "TURN_GREEN" }
| { type: "TURN_YELLOW" }
| { type: "TURN_RED" };Crear una máquina tipada
Pase los tipos de contexto y de eventos a createMachine para comprobar completamente los tipos de estados y transiciones.
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 con assign
Use assign para actualizar el contexto; TypeScript garantiza que el contexto parcial devuelto coincida con el 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 })),
},
},
});Usar la máquina en React
El hook useMachine de @xstate/react devuelve un estado y una función send 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
Las funciones de guardia reciben un contexto y un evento tipados, lo que garantiza que las condiciones se comprueben con los tipos correctos.
const machine = createMachine({
types: {} as { context: TrafficContext; events: TrafficEvent },
states: {
red: {
on: {
TURN_GREEN: {
guard: ({ context }) => context.count < 10, // context: TrafficContext
target: "green",
},
},
},
},
});Acciones tipadas
Las acciones con nombre se pueden tipar declarándolas en la configuración de la máquina e implementándolas mediante 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
XState admite regiones paralelas u ortogonales. TypeScript realiza el seguimiento de los valores de estado de los estados paralelos como objetos.
states: {
ui: {
type: "parallel",
states: {
modal: { initial: "closed", states: { closed: {}, open: {} } },
tooltip: { initial: "hidden", states: { hidden: {}, visible: {} } },
},
},
}Comprobación de estados
Use state.matches() para comprobar el estado actual; XState tipa esta comprobación para los nombres de estado conocidos.
const [state] = useMachine(trafficMachine);
if (state.matches("green")) {
// TypeScript knows we're in the green state
}XState Inspector
Conecte XState Inspector para depurar visualmente las máquinas de estados durante el desarrollo sin perder la seguridad de tipos en el código de producción.
import { inspect } from "@xstate/inspect";
inspect({ iframe: false }); // opens state machine inspectorRecapitulación: tipado de XState
Las máquinas tipadas de XState definen tipos de contexto y eventos, usan assign para actualizar el contexto de forma tipada y se integran con React mediante useMachine para obtener un estado y un envío de eventos completamente tipados.
Comprobación rápida
¿Qué función cumple la propiedad types en la configuración de una máquina de XState v5?
Lo que ha aprendido
XState con TypeScript le proporciona máquinas de estados completamente tipadas: defina los tipos de contexto y eventos, use assign para realizar actualizaciones tipadas y tipifique las condiciones de guardia y las acciones. El hook useMachine proporciona un estado y un envío tipados en los componentes de React.
Aprende TypeScript con un tutor de IA — gratis
Escribe y ejecuta código real en tu navegador, obtén ayuda instantánea de un tutor de IA disponible 24/7 y continúa donde lo dejaste en la web o en la aplicación.
- Cursos
- 101
- Lecciones
- 352
Preguntas frecuentes
¿La lección «XState: máquinas de estados tipadas» es gratis?
Sí — el texto completo de «XState: máquinas de estados tipadas» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de TypeScript Academy, actualiza a CoddyKit PRO. El curso de TypeScript Academy incluye 4 lecciones en total.
¿Qué aprenderé en «XState: máquinas de estados tipadas»?
Modele máquinas de estados con TypeScript en XState. Practicas TypeScript Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar TypeScript Academy?
No se requiere experiencia previa. TypeScript Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 3 de 4.
¿Cuánto tiempo toma la lección «XState: máquinas de estados tipadas»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de TypeScript Academy?
Sí. Cada lección de TypeScript Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- Tipado de slices y thunks de Redux Toolkit
- Patrones de tipado de stores de Zustand
- XState: máquinas de estados tipadas
- Estado derivado y selectores con tipos