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 FelderEin 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.
Aufgabe
EinfachSimulieren 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, diedatamit::zuUsercastet undUser [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
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