インターセクション型
CoddyのLuaジャーニー「Luau入門」セクションの一部。レッスン 36/80。
ユニオン型は、値がある型または別の型であることを示します。交差型はその逆です。アンパサンド&でテーブルの形状を組み合わせ、各部分のフィールドをすべて持つ型を作ります。
type HasName = { name: string }
type HasAge = { age: number }
type Person = HasName & HasAge
-- Person には両方のフィールドが必要
local user: Person = {
name = "Alice",
age = 25,
}ageを省くと、型チェッカーはエラーを出します。交差型は「かつ」であり、選択式ではありません。これを使えば、小さく再利用できる要素から大きな形状を作れます。個別の関心事に対応する型を定義し、必要に応じて組み合わせましょう。
type HasEmail = { email: string }
type Employee = HasName & HasAge & HasEmail
Luauで重要な注意点があります。交差させるのはテーブルの形状(および関数型)であり、プリミティブ型ではありません。number & stringのような型には意味がありません。同時に両方である値は存在しないからです。「この形状とあの形状」を組み合わせたいときは、&を使います。
もちろん、実行時にはPersonは通常のLuaテーブルにすぎません。交差型が存在するのは型チェッカー上だけです。
チャレンジ
簡単2つの小さな形を組み合わせて、1つにしましょう。
type HasName = {name: string}、type HasAge = {age: number}、およびtype Person = HasName & HasAgeと記述します。local user: Person = {name = "Omar", age = 31}を作成します。`Name: {user.name}, Age: {user.age}`を出力します。
Run Codeを押すと、出力にName: Omar, Age: 31が表示されます。
自分で試してみよう
-- 1) type HasName、type HasAge、type Person = HasName & HasAge
-- 2) local user: Person = {...}
-- 3) 名前と年齢の行を出力する
Luau入門のすべてのレッスン
自分で練習してみよう: Luauオンラインコンパイラ