オブジェクトの型を定義する
以下のように定義しました。
type MyObjA = { a1: string; a2: string } type MyObjB = { b1: string; b2: string } type MyObjC = { c1: string; c2: string } type MyObjUnion = MyObjA | MyObjB | MyObjC type MyObjAnd = MyObjA & MyObjB & MyObjC
定義したMyObjUnion型を使ってみる
以下のようにすると、エラーになりました。
const myObj1: MyObjUnion = { a1: 'str', b1: 'str', c1: 'str', }
以下のようにすると、OKになりました。
const myObj1: MyObjUnion = { a1: 'str', a2: 'str', b1: 'str', c1: 'str', }
MyObjUnion型を構成する3つの型のうち1つ以上を満たすと、残る2つの型に含まれるキーはあっても無くても良いみたいです。
定義したMyObjAnd型を使ってみる
以下のようにすると、エラーになりました。
const myObj2: MyObjAnd = { a1: 'str', a2: 'str', b1: 'str', c1: 'str', }
MyObjAnd型を構成する3つの型に含まれるキー全てを満たす必要があるみたいです。
これについて調べてみる
以下のような記事が出てきました。
- TypeScript の共用体型(Union Types)は or ではない(追記あり) - 30歳からのプログラミング
- TypeScriptのunion型はorです 〜union型、構造的部分型、余剰プロパティチェックの話〜 - Qiita
union型(合併型)とintersection型(交差型)についても調べてみると良いかもしれません。