TypeScript Academy · Lección

XState: máquinas de estados tipadas

Modele máquinas de estados con TypeScript en XState.

Lección 3 de 413 pasos

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 inspector

Recapitulació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.

Gratis para empezar

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

  1. Tipado de slices y thunks de Redux Toolkit
  2. Patrones de tipado de stores de Zustand
  3. XState: máquinas de estados tipadas
  4. Estado derivado y selectores con tipos
← Volver a TypeScript Academy