1. 요약

2. 예시

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;