Typzusicherungen
Teil des Abschnitts Einführung in Luau der Lua-Journey von Coddy. Lektion 74 von 80.
Du hast :: bereits einmal im Kapitel über Enums verwendet, um io.read() als Direction zu behandeln. In dieser Lektion schauen wir uns den Operator genauer an.
Manchmal weißt du mehr über einen Wert als Luau's Typprüfer: zum Beispiel, dass ein als any typisierter Wert in Wirklichkeit 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's 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 Typprüfer kennt jetzt die FelderEin Cast ändert nur das, was der Typprüfer glaubt. Er bewirkt zur Laufzeit nichts. Er wandelt einen Wert niemals um: "5" :: any ist weiterhin die Zeichenfolge "5", nicht die Zahl 5 (verwende tonumber für eine echte Umwandlung). Und er prüft niemals, ob der Wert tatsächlich dem angegebenen Typ entspricht: Wenn du den falschen Typ zusicherst, löst der Cast selbst keinen Fehler aus. Dein Code verhält sich später einfach falsch, wenn er auf Felder zugreift, die nicht vorhanden sind.
Wann du ihn verwenden solltest: wenn ein Wert als any (oder als allgemeine Union) ankommt und du seine Struktur wirklich kennst. Wann nicht: um einen Typfehler zu unterdrücken, den du nicht verstehst: Der Fehler weist normalerweise auf einen tatsächlichen Fehler hin, und ihn durch einen Cast auszublenden, kaschiert ihn nur. Bevorzuge echte Prüfungen (wie die typeof-Schutzbedingungen in der nächsten Lektion), wenn du den Wert zur Laufzeit überprüfen kannst.
Aufgabe
EinfachLies einen Datensatz ein, der mit any typisiert ankommt.
- Schreibe
type User = {id: number, username: string, isActive: boolean}. - Schreibe
local function describeUser(data: any): string, das mitlocal user = data :: Usereine Typumwandlung durchführt und`User {user.id}: {user.username} (Active: {user.isActive})`zurückgibt. - Gib
describeUser(rawUser2)aus.
Klicke auf Run Code: Die Ausgabe zeigt User 15: bob_admin (Active: false).
Probier es selbst
-- Rohdatensätze von außerhalb des Programms: als any typisiert
local rawUser1: any = {id = 7, username = "nina_dev", isActive = true}
local rawUser2: any = {id = 15, username = "bob_admin", isActive = false}
-- 1) type User = {...}
-- 2) describeUser(data: any): string, Typumwandlung mit ::
-- 3) describeUser(rawUser2) ausgeben
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 Luau4Mit Funktionen arbeiten
Parameter und Rückgabewerte typisierenAnonyme Funktionen typisierenFunktionen ohne RückgabewertOptionale ParameterStandardwerte für ParameterStandardwerte für boolesche WerteFunktionen mit variabler ParameteranzahlFunktionstypen definierenRückblick: typisierte Funktionen7Projekt: Typisierter Aufgabenmanager
Projekt: Die AufgabenstrukturFunktion zum Hinzufügen einer Aufgabe2Grundlegende Typen
Zahl, String und BooleanDer Typ „any“: NotausgangDer Typ „unknown“Nil- und optionale TypenTypinferenz in der PraxisExplizite TypannotationenRückblick: Übung zu grundlegenden Typen5Typ-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
TypzusicherungenTypwächter mit typeofDer never-TypNull-Sicherheit im Strict-ModusIndexsignaturenRückblick: Typen von KonfigurationswertenRückblick: Typen feinabstimmen3Typisierte Tabellen: Arrays & Maps
Typisierte ArraysElemente hinzufügen und auslesenWas ist ein Map-Typ?Maps deklarieren und auf Elemente zugreifenTabellen durchlaufenTabellen mit gemischten FormenEin Raster auslesenEin Raster erstellentable.unpackRückblick: Arrays und MapsÜbe selbstständig: Online-Luau-Compiler