Menu
Coddy logo textTech

Tipos literales

Parte de la sección Introducción a Luau del Journey de Lua de Coddy — lección 33 de 73.

Los tipos como string permiten cualquier cadena de texto, pero a veces solo tienen sentido unos pocos valores exactos. Un tipo literal utiliza el propio valor como tipo:

local mode: "dark" = "dark"   -- solo se permite la cadena "dark"
local locked: true = true      -- solo se permite el booleano true

Por sí solos, los tipos de un solo valor son una curiosidad. Combinados con uniones, se convierten en una de las herramientas más útiles de Luau: un conjunto estrictamente controlado de valores permitidos:

type Direction = "north" | "south" | "east" | "west"
type GameState = "menu" | "playing" | "paused" | "gameover"

local move: Direction = "north"     -- ✓
local state: GameState = "playing"  -- ✓
-- local bad: Direction = "diagonal" -- ✗ error de tipo!

Ahora, un error de escritura como "nort" o un valor no válido como "diagonal" se detecta mientras editas; con un string normal pasaría sin problemas y fallaría en tiempo de ejecución, si tienes la suerte de darte cuenta.

Los tipos literales distinguen mayúsculas y minúsculas y son exactos: "North" no coincide con "north". Los literales de cadena son el caso más común, pero los literales booleanos y (en versiones más recientes de Luau) de números funcionan de la misma manera. Este patrón —una unión de literales de cadena— es también la forma en que Luau reemplaza los enums de otros lenguajes, como verás en un capítulo posterior.

challenge icon

Desafío

Fácil

Crea tres alias de tipo unión de literales:

  • Direction = "north" | "south" | "east" | "west"
  • GameState = "menu" | "playing" | "paused" | "gameover"
  • Difficulty = "easy" | "medium" | "hard"

Declara, usando los alias:

  • playerDirection: Direction = "north"
  • currentState: GameState = "playing"
  • selectedDifficulty: Difficulty = "medium"

Crea una función movePlayer(direction: Direction): string que devuelva "Moving [direction]", y una función updateGameState(state: GameState): string que devuelva "Game state: [state]".

Imprime, cada uno en su propia línea:

  1. movePlayer(playerDirection)
  2. updateGameState(currentState)
  3. el valor de selectedDifficulty

Pruébalo tú mismo

-- Escribe código aquí
-- tipa Direction / GameState / Difficulty como uniones literales
-- declara playerDirection, currentState, selectedDifficulty
-- movePlayer(direction: Direction): string -> "Moving [direction]"
-- updateGameState(state: GameState): string -> "Game state: [state]"
-- imprime los tres resultados
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Introducción a Luau