Assertions de type
Fait partie de la section Introduction à Luau du Journey Lua de Coddy — leçon 68 sur 73.
Parfois, vous en savez plus sur une valeur que le checker de types de Luau — une valeur typée any dont vous savez qu'elle est en réalité un enregistrement utilisateur, par exemple. Une assertion de type (aussi appelée un cast) vous permet de dire au checker « fais-moi confiance, traite cette valeur comme ce type ». L'opérateur de cast de Luau est :: :
type User = {id: number, username: string}
local raw: any = {id = 42, username = "alice_dev"}
local user = raw :: User
print(user.username) -- le vérificateur connaît maintenant les champsUn cast modifie seulement ce que le checker de types croit — il ne fait rien au moment de l'exécution. Il ne convertit jamais une valeur : "5" :: any reste la string "5", pas le number 5 (utilisez tonumber pour une vraie conversion). Et il ne valide jamais rien : si vous affirmez le mauvais type, le cast lui-même ne renverra pas d'erreur — votre code fonctionnera simplement mal plus tard (later), lorsqu'il touchera des champs (fields) qui ne s'y trouvent pas.
Quand l'utiliser : lorsqu'une valeur arrive sous forme d'any (ou d'une union large) et que vous connaissez réellement sa forme (shape). Quand ne pas l'utiliser : pour faire taire une erreur de type que vous ne comprenez pas — l'erreur vous signale généralement un vrai bug, et la faire disparaître avec un cast ne fait que la masquer. Privilégiez de vraies vérifications (comme les gardes typeof dans la leçon suivante) lorsque vous pouvez vérifier au moment de l'exécution.
Défi
FacileSimulez le traitement d'enregistrements provenant d'une source externe sans information de type.
- Déclarez
type User = {id: number, username: string, isActive: boolean}. - Écrivez une fonction
describeUser(data: any): stringqui typera (cast)dataenUseravec::et retourneraUser [id]: [username] (Active: [isActive])construit avec de l'interpolation de chaîne.
Le code de départ définit déjà trois enregistrements bruts typés any. Appelez describeUser sur chacun d'eux et affichez les trois résultats, dans l'ordre.
Première ligne attendue : User 42: alice_dev (Active: true)
Essayez vous-même
-- Enregistrements bruts provenant d'une source externe : typés `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}
-- Écrivez le code ici
-- 1) déclarez le type User
-- 2) describeUser(data: any): string — castez avec :: et construisez le message
-- 3) affichez la description des trois enregistrements
Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Toutes les leçons de Introduction à Luau
1Premiers pas avec Luau
Qu'est-ce que Luau ?Pourquoi utiliser Luau ?Votre premier code LuauVérification de type et modes d'erreurRécapitulatif : Introduction à Luau4Travailler avec les fonctions
Typage des paramètres et valeurs de retourTypage des fonctions anonymesFonctions ne retournant rienParamètres optionnelsValeurs par défaut des paramètresFonctions variadiquesDéfinition des types de fonctionsRécapitulatif : Fonctions typées2Types fondamentaux
Types de base : num, str, boolLe type 'any' : la porte de sortieLe type 'unknown'Types Nil et optionnelsL'inférence de type en actionAnnotations explicites de typeRécapitulatif : Pratique des types fondamentaux5Alias, unions et intersections
Alias de types pour les types primitifsTypes unionsTravailler avec les types unionsTypes littérauxTypes intersectionsCombinaison d'alias de typesRécapitulatif : Combinaisons de types avancées3Tables typées : Tableaux et Maps
Tableaux typésAjout et lecture d'élémentsQu'est-ce qu'un type Map ?Déclaration et accès aux MapsItération sur les tablesTables à formes mixtesTableaux typés multidimensionnelstable.unpack et VarargsRécapitulatif : Tableaux et Maps