Menu
CoddyTech

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 champs

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

challenge icon

Défi

Facile

Lis un enregistrement qui arrive typé any.

  1. Écris type User = {id: number, username: string, isActive: boolean}.
  2. Écris local function describeUser(data: any): string qui effectue une conversion de type avec local user = data :: User et renvoie `User {user.id}: {user.username} (Active: {user.isActive})`.
  3. 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

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