Menu
Coddy logo textTech

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 champs

Une 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.

challenge icon

Défi

Facile

Simule 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): string qui convertit data en User avec :: et renvoie User [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
quiz iconTestez-vous

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

Entraînez-vous par vous-même : Compilateur Lua en ligne