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 campiUn 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).
Sfida
FacileSimula 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): stringche esegue il cast didataaUsercon::e restituisceUser [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
Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Introduzione a Luau
1Per iniziare con Luau
Che cos'è Luau?Perché usare Luau?Il tuo primo codice LuauVerifica dei tipi e modalità di erroreRiepilogo: introduzione a Luau4Lavorare con le funzioni
Tipizzare i parametri e i valori restituitiTipizzare le funzioni anonimeFunzioni che non restituiscono nullaParametri opzionaliValori predefiniti dei parametriFunzioni variadicheDefinire i tipi di funzioneRiepilogo: funzioni tipizzate2Tipi fondamentali
Tipi di base: num, str, boolIl tipo 'any': una via di fugaIl tipo 'unknown'Nil e tipi opzionaliL'inferenza dei tipi in azioneAnnotazioni esplicite dei tipiRipasso: esercizi sui tipi fondamentali5Alias, unioni e intersezioni
Alias di tipo per i primitiviTipi unioneLavorare con i tipi unioneTipi letteraliTipi intersezioneCombinare gli alias di tipoRiepilogo: combinazioni avanzate di tipi8Gli enum, secondo lo stile di Luau
Il pattern degli enum in LuauEnum numerici con le tabelleEnum di stringhe come unioniUsare enum con unioni di valori letteraliCongelare le tabelle costantiRiepilogo: gli enum, secondo lo stile di Luau11Argomenti avanzati
Asserzioni di tipoControlli di tipo con typeofIl tipo neverSicurezza rispetto a nil in modalità strictFirme di indiceRiepilogo: perfezionare i tipi3Tabelle tipizzate: array e mappe
Array tipizzatiAggiungere e leggere elementiChe cos'è un tipo Map?Dichiarare e accedere alle mappeIterare sulle tabelleTabelle con strutture misteArray tipizzati multidimensionalitable.unpack e argomenti variabiliRiepilogo: array e mappeEsercitati da solo: Compilatore Luau online