Menu
Coddy logo textTech

Typzusicherungen (Type Assertions)

Teil des Abschnitts Einführung in Luau der Lua-Journey von Coddy — Lektion 68 von 73.

Manchmal wissen Sie mehr über einen Wert als der Type-Checker von Luau — zum Beispiel bei einem Wert, der als any typisiert ist, von dem Sie aber wissen, dass es sich in Wirklichkeit um einen user-Datensatz handelt. Eine Type Assertion (auch als cast bezeichnet) ermöglicht es Ihnen, dem checker zu sagen: „Vertrau mir, behandle diesen Wert als diesen Typ“. Luaus Cast-Operator ist :::

type User = {id: number, username: string}

local raw: any = {id = 42, username = "alice_dev"}
local user = raw :: User
print(user.username) -- der Checker kennt jetzt die Felder

Ein Cast ändert nur das, was der Type-Checker glaubt — zur Laufzeit tut er gar nichts. Er konvertiert niemals einen Wert: "5" :: any ist still der string "5", nicht die Zahl 5 (verwenden Sie tonumber für eine echte Konvertierung). Und er validiert niemals: Wenn Sie den falschen type zusichern, wird der Cast selbst keinen Fehler auslösen — Ihr Code wird sich einfach later falsch verhalten, wenn er auf fields zugreift, die nicht vorhanden sind.

Wann man ihn verwendet: Wenn ein Wert als any (oder eine breite Union) ankommt und Sie seine shape genau know. Wann man ihn nicht verwendet: Um einen Typfehler zu unterdrücken, den Sie nicht verstehen — der Fehler weist Sie gewöhnlich auf einen echten Bug hin, und ihn wegzucasten blendet ihn nur aus. Bevorzugen Sie echte Prüfungen (wie die typeof-Guards in der nächsten Lektion), wenn Sie zur Laufzeit überprüfen können.

challenge icon

Aufgabe

Einfach

Simulieren Sie das Verarbeiten von Datensätzen, die aus einer externen Quelle ohne Typinformationen eingehen.

  • Deklarieren Sie type User = {id: number, username: string, isActive: boolean}.
  • Schreiben Sie eine Funktion describeUser(data: any): string, die data mit :: zu User castet und User [id]: [username] (Active: [isActive]) mittels String-Interpolation zurückgibt.

Der Startcode definiert bereits drei Rohdatensätze vom Typ any. Rufen Sie describeUser für jeden davon auf und geben Sie die drei Ergebnisse der Reihe nach aus.

Erwartete erste Zeile: User 42: alice_dev (Active: true)

Probier es selbst

-- Rohe Datensätze aus einer externen Quelle: typisiert als `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}

-- Schreibe hier den Code
-- 1) deklariere den User-Typ
-- 2) describeUser(data: any): string — mit :: casten und die Nachricht erstellen
-- 3) gib die Beschreibung aller drei Datensätze aus
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Einführung in Luau