Assertions de type
Fait partie de la section Introduction à Luau du Journey Lua de Coddy. Leçon 68 sur 73.
Parfois, tu en sais plus sur une valeur que le vérificateur de types de Luau : par exemple, une valeur typée any dont tu sais qu’il s’agit en réalité d’un enregistrement utilisateur. Une assertion de type (également appelée conversion de type) te permet de dire au vérificateur : « fais-moi confiance, traite cette valeur comme ce type ». L’opérateur de conversion de type 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 champsUne conversion de type modifie uniquement ce que croit le vérificateur de types. Elle ne fait rien à l’exécution. Elle ne convertit jamais une valeur : "5" :: any reste la chaîne "5", et non le nombre 5 (utilise tonumber pour une véritable conversion). Et elle ne valide jamais une valeur : si tu affirmes le mauvais type, la conversion elle-même ne provoquera pas d’erreur. Ton code se comportera simplement de manière incorrecte plus tard, lorsqu’il accédera à des champs qui n’existent pas.
Quand l’utiliser : lorsqu’une valeur arrive sous la forme de any (ou d’une union large) et que tu connais réellement sa structure. Quand ne pas l’utiliser : pour faire taire une erreur de type que tu ne comprends pas : l’erreur te signale généralement un vrai bug, et la supprimer avec une conversion ne fait que le dissimuler. Préfère les vérifications réelles (comme les gardes typeof de la leçon suivante) lorsque tu peux vérifier la valeur à l’exécution.
Défi
FacileSimule le traitement d’enregistrements qui arrivent d’une source externe sans informations de type.
- Déclare
type User = {id: number, username: string, isActive: boolean}. - Écris une fonction
describeUser(data: any): stringqui convertitdataenUseravec::et renvoieUser [id]: [username] (Active: [isActive])construit par interpolation de chaîne.
Le code de départ définit déjà trois enregistrements bruts typés any. Appelle describeUser sur chacun d’eux et affiche 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éclarer le type User
-- 2) describeUser(data: any): string — caster avec :: et construire le message
-- 3) afficher 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 MapsEntraînez-vous par vous-même : Compilateur Lua en ligne