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 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 campos

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

challenge icon

Desafío

Fácil

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