Shapes erweitern
Teil des Abschnitts Einführung in Luau der Lua-Journey von Coddy. Lektion 43 von 80.
Verwandte Formen haben oft gemeinsame Felder. Jedes Admin ist auch ein User; wenn du die gemeinsamen Felder in beide Deklarationen kopierst, können sie auseinanderdriften.
Du hast den Schnittmengenoperator & beim Kombinieren von Aliasen kennengelernt. Er funktioniert bei Formen genauso. A & B bedeutet „hat alles von A und alles von B“:
type User = {name: string, age: number}
type Admin = User & {level: number}
-- Admin erfordert jetzt: name, age UND level
local root: Admin = {name = "Root", age = 35, level = 9}Während TypeScript für Schnittstellen ein separates Schlüsselwort extends benötigt, braucht Luau nichts Neues: Schnittmengen erledigen diese Aufgabe bereits. Du kannst mehrere Teile verketten:
type Contact = {email: string}
type Developer = User & Contact & {yearsExperience: number}Verwechsle & nicht mit |: Eine Vereinigungsmenge A | B ist entweder die eine oder die andere Form, während eine Schnittmenge A & B beide zugleich erfüllen muss. Und da Admin alle Felder von User besitzt, kann ein Wert vom Typ Admin überall dort übergeben werden, wo ein User erwartet wird.
Aufgabe
EinfachErweitere einen Mitarbeiter-Typ zu einem Manager-Typ.
- Schreibe
type Employee = {name: string, department: string}undtype Manager = Employee & {teamSize: number}. - Erstelle
local teamLead: Manager = {name = "Alice Johnson", department = "Engineering", teamSize = 8}. - Gib
`{teamLead.name} manages {teamLead.teamSize} people`und dannteamLead.departmentaus.
Drücke auf Run Code: Die Ausgabe zeigt Alice Johnson manages 8 people und Engineering.
Probier es selbst
-- 1) Definiere den Typ Employee, dann den Typ Manager = Employee & {...}
-- 2) Definiere lokal teamLead: Manager = {...}
-- 3) Gib die Zusammenfassungszeile aus, dann die Abteilung
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-Kombinationen3Typisierte 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