Menu
CoddyTech

形状の拡張

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が求められる場所ならどこにでも渡せます。

challenge icon

チャレンジ

簡単

従業員の型をマネージャーの型に拡張しましょう。

  1. type Employee = {name: string, department: string} と type Manager = Employee & {teamSize: number} を書きます。
  2. local teamLead: Manager = {name = "Alice Johnson", department = "Engineering", teamSize = 8} を作成します。
  3. `{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オンラインコンパイラ