ちょっと見紛らわしい、union(論理和)とintersection(論理積)です。
// union & intersection of types
type Cat = {name: string, purrs: boolean}
type Dog = {name:string, barks: boolean}
type CatOrDog = Cat | Dog
type CatAndDog = Cat & Dog
let a_o: CatOrDog = {
name: 'ball', // need not to specify all properties
barks: false
}
let a_a: CatAndDog = {
name: "Dounald",
barks: false, // need to specify all properties of the Dog and Cat
purrs: false
}
論理和(|)であるa_oはプロパティのいずれかが記述されてればいいけれども、論理積(&)であるa_aはプロパティを全て記述しないとエラーになります。
実際のコードではunionの方が遥かに登場機会が多いようですが、いずれかのプロパティを持てば良いという定義からしてそうなりそうです。
admin