形状の拡張
CoddyのLuaジャーニー「Luau入門」セクションの一部。レッスン 43/80。
関連する形状はフィールドを共有していることがよくあります。すべてのAdminはUserでもあります。共有フィールドを両方の宣言にコピーすると、内容が食い違う原因になります。
エイリアスを組み合わせるときに、交差演算子&を学びました。形状でもまったく同じように機能します。A & Bは「AのすべてとBのすべてを持つ」という意味です。
type User = {name: string, age: number}
type Admin = User & {level: number}
-- Adminには現在、name、age、levelのすべてが必要です
local root: Admin = {name = "Root", age = 35, level = 9}TypeScriptではインターフェースに別途extendsキーワードが必要ですが、Luauでは新しいものは何も必要ありません。交差型がすでにその役割を果たします。複数の部分を連結できます。
type Contact = {email: string}
type Developer = User & Contact & {yearsExperience: number}&と|を混同しないでください。ユニオン型A | Bはどちらか一方の形状であるのに対し、交差型A & Bは両方を同時に満たす必要があります。また、AdminはすべてのUserフィールドを持つため、Adminの値はUserが求められる場所ならどこにでも渡せます。
チャレンジ
簡単従業員の型をマネージャーの型に拡張しましょう。
type Employee = {name: string, department: string}とtype Manager = Employee & {teamSize: number}を書きます。local teamLead: Manager = {name = "Alice Johnson", department = "Engineering", teamSize = 8}を作成します。`{teamLead.name} manages {teamLead.teamSize} people`を出力し、次にteamLead.departmentを出力します。
コードを実行を押します。出力には Alice Johnson manages 8 people と Engineering が表示されます。
自分で試してみよう
-- 1) type Employeeを定義し、次にtype Manager = Employee & {...}を定義する
-- 2) local teamLead: Manager = {...}を定義する
-- 3) 要約行を出力し、次に部署を出力する
Luau入門のすべてのレッスン
自分で練習してみよう: Luauオンラインコンパイラ