Aseveraciones de Tipo
Parte de la sección Introducción a Luau del Journey de Lua de Coddy — lección 68 de 73.
A veces sabes más sobre un valor de lo que sabe el checker de tipos de Luau — por ejemplo, un valor con el tipo any que sabes que en realidad es un registro de usuario. Una aserción de tipo (también llamada cast) te permite decirle al checker "confía en mí, trata este valor como este tipo". El operador de cast de Luau es :::
type User = {id: number, username: string}
local raw: any = {id = 42, username = "alice_dev"}
local user = raw :: User
print(user.username) -- el checker ahora conoce los camposUn cast cambia únicamente lo que el checker de tipos cree — no hace nada en tiempo de ejecución. Nunca convierte un valor: "5" :: any sigue siendo el string "5", no el number 5 (usa tonumber para una conversión real). Y nunca valida: si asertamos el tipo incorrecto, el cast en sí no dará error — tu código simplemente fallará más adelante (later), cuando acceda a campos que no están ahí.
Cuándo usarlo: cuando un valor llega como any (o una unión amplia) y realmente conoces su estructura (shape). Cuándo no usarlo: para silenciar un error de tipo que no entiendes — el error generalmente te advierte sobre un error real en el código, y ocultarlo con un cast solo lo disfraza. Prefiere comprobaciones reales (como las guardas typeof de la siguiente lección) cuando puedas verificar en tiempo de ejecución.
Desafío
FácilSimula el procesamiento de registros que llegan de una fuente externa sin información de tipo.
- Declara
type User = {id: number, username: string, isActive: boolean}. - Escribe una función
describeUser(data: any): stringque realice un cast dedataaUsercon::y devuelvaUser [id]: [username] (Active: [isActive])construido con interpolación de strings.
El código inicial ya define tres registros raw con tipo any. Llama a describeUser en cada uno de ellos e imprime los tres resultados, en orden.
Primera línea esperada: User 42: alice_dev (Active: true)
Pruébalo tú mismo
-- Registros en bruto de una fuente externa: tipados `any`
local rawUser1: any = {id = 42, username = "alice_dev", isActive = true}
local rawUser2: any = {id = 15, username = "bob_admin", isActive = false}
local rawUser3: any = {id = 99, username = "charlie_user", isActive = true}
-- Escribe el código aquí
-- 1) declara el tipo User
-- 2) describeUser(data: any): string — castea con :: y construye el mensaje
-- 3) imprime la descripción de los tres registros
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 tipos8Enums al estilo de Luau
El patrón Enum en LuauEnums numéricos con tablasEnums de cadena como unionesUso de uniones literales como EnumsCongelación de tablas constantesRecapitulación: Enums al estilo de Luau11Temas Avanzados
Aseveraciones de TipoGuardias de Tipo con typeofEl Tipo neverSeguridad contra Nulos en Modo EstrictoFirmas de ÍndiceRecapitulacion: Ajuste Preciso 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