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 comprobador de tipos de Luau: por ejemplo, un valor con tipo any que sabes que en realidad es un registro de usuario. Una aserción de tipo (también llamada conversión de tipo) te permite decirle al comprobador: «confía en mí, trata este valor como este tipo». El operador de conversión de tipo 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 verificador ahora conoce los camposUna conversión cambia únicamente lo que cree el comprobador de tipos. No hace nada durante la ejecución. Nunca convierte un valor: "5" :: any sigue siendo la cadena "5", no el número 5 (usa tonumber para una conversión real). Y nunca valida: si afirmas el tipo incorrecto, la conversión en sí no producirá un error. Tu código simplemente se comportará mal más adelante, cuando intente acceder a campos que no existen.
Cuándo usarla: cuando un valor llega como any (o como una unión amplia) y realmente conoces su estructura. Cuándo no usarla: para silenciar un error de tipo que no entiendes: normalmente, el error te está indicando un error real, y eliminarlo mediante una conversión solo lo oculta. Prefiere comprobaciones reales (como las protecciones con typeof de la siguiente lección) cuando puedas verificarlo durante la ejecución.
Desafío
FácilSimula el procesamiento de registros que llegan de una fuente externa sin información de tipos.
- Declara
type User = {id: number, username: string, isActive: boolean}. - Escribe una función
describeUser(data: any): stringque conviertadataaUsercon::y devuelvaUser [id]: [username] (Active: [isActive])construido mediante interpolación de cadenas.
El código inicial ya define tres registros sin procesar tipados como any. Llama a describeUser con 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 sin procesar de una fuente externa: tipados como `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 — convierte 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 MapsPractica por tu cuenta: Compilador de Lua online