交差型(Intersection Types)と共用体型(Union Types)について

交差型(Intersection Types)と共用体型(Union Types)について

交差型(Intersection Types)

T & U

TとUの両方を満たす型を動的に生成できる

type T = { foo: string };
type U = { bar: number };

type I = T & U;

// fooまたはbarのいずれかが未定義の場合はコンパイルエラー
const obj: I = {
  foo: "foo",
  bar: 123
};
type T = { foo: string };
type U = { bar: number, foo: number };

// fooの型が一致しない場合、fooはnever型となり代入ができずコンパイルエラーとなる
type I = T & U;

const obj: I = {
  foo: "foo",
  bar: 123
};
type A = { a:number }; // 必須
type B = { a?:number }; // 任意

type C1 = A & B;
const objC1:C1 = {}; // compile error.

type C2 = B & A;
const objC2:C2 = {}; // compile error.

共用体型(Union Types)

T | U

TもしくはUである型を動的に生成できる

type T = { foo: string, hoge: number };
type U = { bar: number, hoge: number };

type I = T | U;

const obj1: I = {
  foo: "foo",
  hoge: 1
};

const obj2: I = {
  bar: 123,
  hoge: 1
};