形状の拡張
CoddyのLuaジャーニー「Luau入門」セクションの一部。レッスン 41/73。
関連する型は、しばしばフィールドを共有します。すべての Admin は User でもあります。共有フィールドを両方の宣言にコピーすると、それらが別々に変化してしまいやすくなります。
エイリアスを組み合わせるときに、交差演算子 & を見ました。型でもまったく同じように機能します。A & B は「A のすべての要素と B のすべての要素を持つ」という意味です。
type User = {name: string, age: number}
type Admin = User & {level: number}
-- Admin は name、age AND 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 が期待される場所ならどこにでも渡せます。
チャレンジ
簡単次の型エイリアスを作成してください:
Employee:id(number)、name(string)、department(string)Manager:&を使ってEmployeeを拡張し、teamSize(number)を追加Contact:email(string)Developer:Employee、Contact、{yearsExperience: number}のintersection
次を作成してください:
- 型が
ManagerのteamLead:id101、name"Alice Johnson"、department"Engineering"、teamSize8 - 型が
Developerのdev:id102、name"Bob Smith"、department"Engineering"、email"bob@company.com"、yearsExperience5
Managerを受け取り、[name] manages [teamSize] peopleを返す関数getManagerSummaryを作成してください。
次の内容を、それぞれ別の行に出力してください:
getManagerSummary(teamLead)の結果devについての[name] has [yearsExperience] years of experienceteamLeadのdepartmentdevのemail
自分で試してみよう
-- ここにコードを書いてください
-- 1) Employee を定義し、次に Manager / Contact / Developer を & で
-- 2) teamLead と dev を作成する
-- 3) getManagerSummary を書く
-- 4) 要求された4行を出力する
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
Luau入門のすべてのレッスン
7プロジェクト:Typed Task Manager
プロジェクト:タスクの型定義タスクを追加する関数自分で練習してみよう: Luaオンラインコンパイラ