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, 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 champs

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

challenge icon

Défi

Facile

Simulez 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): string qui typera (cast) data en User avec :: et retournera User [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
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