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 FelderEin 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.
Aufgabe
EinfachSimuliere 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, diedatamitUserin::umwandelt undUser [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
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
1Erste Schritte mit Luau
Was ist Luau?Warum Luau nutzen?Dein erster Luau-CodeTypprüfung & FehlermodiZusammenfassung: Einführung in Luau4Arbeiten mit Funktionen
Typisierung von Parametern & RückgabewertenTypisierung von anonymen FunktionenFunktionen ohne RückgabewertOptionale ParameterStandard-ParameterwerteVariadische FunktionenDefinieren von FunktionstypenZusammenfassung: Typisierte Funktionen2Grundtypen
Grundlegende Typen: num, str, boolDer Typ 'any': Der AuswegDer Typ 'unknown'Nil- & optionale TypenTypinferenz in der PraxisExplizite TypannotationenZusammenfassung: Praxis zu Grundtypen5Typ-Aliase, Union-Typen und Schnittmengen-Typen
Typ-Aliase für PrimitivenUnion-TypenArbeiten mit Union-TypenLiterale TypenSchnittmengen-Typen (Intersection Types)Kombination von Typ-AliasenZusammenfassung: Fortgeschrittene Typ-Kombinationen8Enums auf die Luau-Art
Das Enum-Pattern in LuauNumerische Enums mit TablesString-Enums als UnionsVerwendung von Literal Union EnumsKonstante Tables einfrierenZusammenfassung: Enums auf die Luau-Art11Fortgeschrittene Themen
Typzusicherungen (Type Assertions)Type Guards mit typeofDer Typ neverNil-Sicherheit im Strict ModeIndex-SignaturenZusammenfassung: Feineinstellung von Typen3Typisierte Tabellen: Arrays & Maps
Typisierte ArraysHinzufügen und Lesen von ElementenWas ist ein Map-Typ?Deklarieren und Zugreifen auf MapsIterieren von TabellenGemischt-strukturierte TabellenMehrdimensionale typisierte Arraystable.unpack und VarargsZusammenfassung: Arrays und MapsÜbe selbstständig: Online-Lua-Compiler