Menu
Coddy logo textTech

Typzusicherungen (Type Assertions)

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

Manchmal weißt du mehr über einen Wert als der Typprüfer von Luau: zum Beispiel über einen Wert mit dem Typ any, von dem du weißt, dass er tatsächlich ein Benutzerdatensatz ist. Eine Typzusicherung (auch Cast genannt) ermöglicht es dir, dem Prüfer zu sagen: „Vertrau mir, behandle diesen Wert als diesen Typ.“ Luau verwendet den Cast-Operator :::

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 Typprüfer glaubt. Zur Laufzeit tut er nichts. Er konvertiert niemals einen Wert: "5" :: any ist weiterhin die Zeichenkette "5", nicht die Zahl 5 (verwende tonumber für eine tatsächliche Konvertierung). Und er führt niemals eine Validierung durch: Wenn du den falschen Typ zusicherst, löst der Cast selbst keinen Fehler aus. Dein Code wird sich einfach später fehlerhaft verhalten, wenn er auf Felder zugreift, die nicht vorhanden sind.

Wann du ihn verwenden solltest: wenn ein Wert als any (oder als breite Union) eintrifft und du seine Struktur wirklich kennst. Wann nicht: um einen Typfehler zum Schweigen zu bringen, den du nicht verstehst: Der Fehler weist normalerweise auf einen echten Fehler hin, und ihn wegzucasten, verschleiert ihn nur. Bevorzuge echte Prüfungen (wie die typeof-Guards in der nächsten Lektion), wenn du den Wert zur Laufzeit überprüfen kannst.

challenge icon

Aufgabe

Einfach

Simuliere die Verarbeitung von Datensätzen, die ohne Typinformationen aus einer externen Quelle eintreffen.

  • Deklariere type User = {id: number, username: string, isActive: boolean}.
  • Schreibe eine Funktion describeUser(data: any): string, die data mit User in :: umwandelt und User [id]: [username] (Active: [isActive]) zurückgibt, erstellt durch String-Interpolation.

Der Startcode definiert bereits drei rohe Datensätze vom Typ any. Rufe describeUser für jeden von ihnen auf und gib die drei Ergebnisse in dieser Reihenfolge 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

Übe selbstständig: Online-Lua-Compiler