&
는 두 타입의 합집합을 뜻한다.|
는 두 타입의 키의 교집합을 뜻한다.&
할 경우, never
가 된다.type TestA = {
cat: 12,
dog: 1,
}
type TestB = {
cat : 12,
lion: 2,
}
type TestAND = TestA & TestB;
type TestOR = TestA | TestB;
// OK: 합쳐진 형태를 모두 만족함
const a1: TestAND = { cat:12, dog:1, lion:2 }
// ERROR: TestA의 형태만 만족하고, TestB의 line이 없음
const a2: TestAND = { cat:12, dog:1 }
// OK: TestA, TestB 중 하나 이상의 형태를 만족함
const o1: TestOR = { cat:12, dog:1, lion:2 }
// OK: TestA의 형태를 만족함
const o2: TestOR = { cat:12, dog:1 }
// OK: TestB의 형태를 만족함
const o3: TestOR = { cat:12, lion:2 }
// ERROR: TestA, TestB의 형태 중 아무것도 만족하지 못함
const o4: TestOR = {dog: 1, lion: 2}
// "cat" | "dog" | "lion"
type KeyAND = keyof TestAND;
// "cat" => 중복된 키만 만족 (중복된 키가 없다면 never 타입)
type KeyOR = keyof TestOR;