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 truePor 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.
Desafío
FácilCrea 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:
movePlayer(playerDirection)updateGameState(currentState)- 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
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
1Primeros pasos con Luau
¿Qué es Luau?¿Por qué usar Luau?Tu primer código en LuauComprobación de tipos y modos de errorRecapitulacion: Introducción a Luau4Trabajando con Funciones
Tipado de Parámetros y Valores de RetornoTipado de Funciones AnónimasFunciones que no Retornan NadaParámetros OpcionalesValores por Defecto en ParámetrosFunciones VariádicasDefinición de Tipos de FuncionesRecapitulaciones: Funciones Tipadas2Tipos principales
Tipos básicos: num, str, boolEl tipo 'any': Vía de escapeEl tipo 'unknown'Tipos nulos y opcionalesInferencia de tipos en acciónAnotaciones explícitas de tiposResumen: Práctica de tipos principales5Alias, Uniones e Intersecciones
Alias de tipos para primitivosTipos de uniónTrabajando con tipos de uniónTipos literalesTipos de intersecciónCombinando alias de tiposResumen: Combinaciones avanzadas de tipos3Tablas tipadas: Arrays y Maps
Arrays tipadosAñadir y leer elementos¿Qué es un tipo Map?Declarar y acceder a MapsIterar tablasTablas de forma mixtaArrays tipados multidimensionalestable.unpack y VarargsRecapitulaciones: Arrays y Maps