Union Type & Intersection Type

旅人·2023년 3월 16일
0

Union Type

상수가 아닌 리터럴 변수에 다른 타입의 변수를 저장하고 싶다면

미리 유니언 타입으로 타입을 지정해줘야 함

// Literal Types
const userName1 = "Bob";
let userName2: string | number = "Alice";

// 다른 타입의 값을 저장하고 싶다면
// 위처럼 미리 유니언 타입으로
userName2 = 3;

role과 같은 변수일 경우

유니언 타입을 통해 마치 enum과 같이 제한할 수 있음

/ -------------------------------------
// union type
type Job = "police" | "developer" | "teacher";

interface User {
  name: string;
  job: Job;
}

const user: User = {
  name: "Jack",
  job: "police",
};

interface HighSchoolStudent {
  name: string;
  grade: 1 | 2 | 3;
}

유니언타입에 쓰이는 타입에 서로다른 prop가 있을 경우

if문이나 switch문 등을 통해

타입에 따른 분기가 필요


interface Car {
  name: "car";
  color: string;
  start(): void;
}
interface Mobile {
  name: "mobile";
  color: string;
  call(): void;
}

function getGift(gift: Car | Mobile) {
  console.log(gift.color);
  if (gift.name === "car") {
    gift.start();
  } else {
    gift.call();
  }

Intersection Type

// -----------------------
// Intersection Types
interface Bus {
  name: string;
  start(): void;
}

interface Toy {
  name: string;
  color: string;
  price: number;
}

const toyBus: Toy & Bus = {
  name: "장난감",
  start() {},
  color: "black",
  price: 12000,
};

인터섹션 타입에 쓰이는 타입의 모든 필드를 채워줘야 함.

profile
一期一会

0개의 댓글