Assertions de type
Fait partie de la section Introduction à Luau du Journey Lua de Coddy. Leçon 74 sur 80.
Tu as déjà utilisé :: une fois, dans le chapitre sur les énumérations, pour traiter io.read() comme une Direction. Cette leçon examine son fonctionnement plus en détail.
Parfois, tu en sais plus sur une valeur que le vérificateur de types de Luau : par exemple, tu sais qu’une valeur de type any est en réalité 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 étant de 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 ne change que 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 la valeur : si tu déclares le mauvais type, la conversion elle-même ne provoquera pas d’erreur. Ton code se comportera simplement mal plus tard, lorsqu’il accédera à des champs inexistants.
Quand l’utiliser : lorsqu’une valeur arrive avec le type any (ou une union large) et que tu connais réellement sa forme. Quand ne pas l’utiliser : pour faire taire une erreur de type que tu ne comprends pas : l’erreur signale généralement un vrai bogue, et l’ignorer avec une conversion ne fait que le masquer. Préfère de véritables vérifications (comme les gardes typeof de la leçon suivante) lorsque tu peux vérifier la valeur à l’exécution.
Défi
FacileLis un enregistrement qui arrive typé any.
- Écris
type User = {id: number, username: string, isActive: boolean}. - Écris
local function describeUser(data: any): stringqui effectue une conversion de type aveclocal user = data :: Useret renvoie`User {user.id}: {user.username} (Active: {user.isActive})`. - Affiche
describeUser(rawUser2).
Appuie sur Run Code : la sortie affiche User 15: bob_admin (Active: false).
Essayez vous-même
-- Enregistrements bruts provenant de l’extérieur du programme : typés any
local rawUser1: any = {id = 7, username = "nina_dev", isActive = true}
local rawUser2: any = {id = 15, username = "bob_admin", isActive = false}
-- 1) type User = {...}
-- 2) describeUser(data: any): string, conversion de type avec ::
-- 3) afficher describeUser(rawUser2)
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
Typer les paramètres et les valeurs de retourTyper les fonctions anonymesFonctions sans valeur de retourParamètres optionnelsValeurs par défaut des paramètresValeurs par défaut pour les booléensFonctions variadiquesDéfinir des types de fonctionsRécapitulatif : fonctions typées7Projet : gestionnaire de tâches typé
Projet : la structure d’une tâcheFonction pour ajouter une tâche2Types fondamentaux
Nombre, chaîne de caractères et booléenLe type « any » : une échappatoireLe type « unknown »Types nil et optionnelsL’inférence de types en actionAnnotations de type explicitesRécapitulatif : exercices sur les 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ésAjouter et lire des élémentsQu’est-ce qu’un type Map ?Déclarer et accéder aux mapsParcourir les tablesTables de formes mixtesLire une grilleConstruire une grilletable.unpackRécapitulatif : tableaux et mapsEntraînez-vous par vous-même : Compilateur Luau en ligne