Menu
CoddyTech

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 Felder

Ein 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.

challenge icon

Aufgabe

Einfach

Lies einen Datensatz ein, der mit any typisiert ankommt.

  1. Schreibe type User = {id: number, username: string, isActive: boolean}.
  2. Schreibe local function describeUser(data: any): string, das mit local user = data :: User eine Typumwandlung durchführt und `User {user.id}: {user.username} (Active: {user.isActive})` zurückgibt.
  3. 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

Übe selbstständig: Online-Luau-Compiler