Menu
Coddy logo textTech

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 campos

Una 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.

challenge icon

Desafío

Fácil

Simula 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): string que convierta data a User con :: y devuelva User [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
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

Practica por tu cuenta: Compilador de Lua online