Menu
Coddy logo textTech

Asserzioni di tipo

Fa parte della sezione Introduzione a Luau del percorso Lua di Coddy. Lezione 68 di 73.

A volte sai più cose su un valore di quante ne sappia il type checker di Luau: per esempio, sai che un valore tipizzato come any è in realtà un record utente. Una asserzione di tipo (detta anche cast) ti permette di dire al checker «fidati, tratta questo valore come se fosse di questo tipo». L’operatore di cast di Luau è :::

type User = {id: number, username: string}

local raw: any = {id = 42, username = "alice_dev"}
local user = raw :: User
print(user.username) -- Il verificatore ora conosce i campi

Un cast cambia solo ciò che il type checker ritiene. Non fa nulla in fase di esecuzione. Non converte mai un valore: "5" :: any è ancora la stringa "5", non il numero 5 (usa tonumber per una conversione effettiva). E non convalida mai il valore: se asserisci il tipo sbagliato, il cast in sé non genera errori. Il tuo codice semplicemente si comporterà in modo errato più avanti, quando accederà a campi che non esistono.

Quando usarlo: quando un valore arriva come any (o come un’unione ampia) e conosci davvero la sua struttura. Quando non usarlo: per ignorare un errore di tipo che non capisci: di solito l’errore ti sta segnalando un bug reale e rimuoverlo con un cast serve solo a nasconderlo. Quando puoi verificare il valore in fase di esecuzione, preferisci controlli effettivi (come le verifiche typeof della lezione successiva).

challenge icon

Sfida

Facile

Simula l’elaborazione di record che arrivano da una fonte esterna senza informazioni sui tipi.

  • Dichiara type User = {id: number, username: string, isActive: boolean}.
  • Scrivi una funzione describeUser(data: any): string che esegue il cast di data a User con :: e restituisce User [id]: [username] (Active: [isActive]) costruito con l’interpolazione di stringhe.

Il codice iniziale definisce già tre record grezzi tipizzati come any. Chiama describeUser su ciascuno di essi e stampa i tre risultati, nell’ordine.

Prima riga prevista: User 42: alice_dev (Active: true)

Provalo tu

-- Record grezzi da una fonte esterna: tipizzati come `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}

-- Scrivi il codice qui
-- 1) dichiara il tipo User
-- 2) describeUser(data: any): string — esegui il cast con :: e costruisci il messaggio
-- 3) stampa la descrizione di tutti e tre i record
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Introduzione a Luau

Esercitati da solo: Compilatore Luau online