🌈 Union Types

받을 수 μžˆλŠ” 인자λ₯Ό μ •ν•΄μ€€λ‹€?!

μœ λ‹ˆμ˜¨ νƒ€μž…(Union Type)μ΄λž€? μžλ°”μŠ€ν¬λ¦½νŠΈμ˜ OR μ—°μ‚°μž( Β  )와 같이 β€˜A’ μ΄κ±°λ‚˜ β€˜B’이닀 λΌλŠ” 의미의 νƒ€μž….
  • OR의 λ„ˆλ‚Œ?? πŸ€”


βœ”οΈ Union Types 예제1

인자λ₯Ό 선택할 λ•Œ μœ„μ˜ 그림처럼 μ„ νƒν•˜κ²Œλ” μ•Œλ €μ€Œ. 받을 수 μžˆλŠ” 인자λ₯Ό μ •ν•΄μ€€λ‹€.

  • λ¦¬ν„°λŸ΄ νƒ€μž…μ˜ ν™•μž₯된 λ„ˆλ‚Œ?!πŸ€”
type Direction = "left" | "right" | "up" | "down";
function move(direction: Direction) {
  console.log(direction);
}
move("down");

type TileSize = 8 | 16 | 32;
const tile: TileSize = 16;


βœ”οΈ Union Types 예제2

ν•¨μˆ˜μ˜ νŒŒλΌλ―Έν„° idλŠ” number νƒ€μž…μ΄λ‚˜ string νƒ€μž…μ΄ λͺ¨λ‘ 올 수 μžˆλ‹€.

이처럼 | μ—°μ‚°μžλ₯Ό μ΄μš©ν•˜μ—¬ νƒ€μž…μ„ μ—¬λŸ¬ 개 μ—°κ²°ν•˜λŠ” 방식

function printId(id: number | string) {
  if (typeof id === "string") {
    console.log(id.toUpperCase());
  } else {
    console.log(id);
  }
}


βœ”οΈ Union Types 예제3

// function: login -> success or fail ⏱
type SuccessState = {
  response: {
    body: string;
  };
};
type FailState = {
  reason: string;
};
type LoginState = SuccessState | FailState;

function login(id: string, password: string): LoginState {
  return {
    response: {
      body: "logged in!",
    },
  };
}



Intersection Types: & ✨

Union typeκ³Ό λ°˜λŒ€λ˜λŠ” νƒ€μž…?

  • Intersection typeμ΄λž€?
    • μΈν„°μ„Ήμ…˜ νƒ€μž…(Intersection Type)은 μ—¬λŸ¬ νƒ€μž…μ„ λͺ¨λ‘ λ§Œμ‘±ν•˜λŠ” ν•˜λ‚˜μ˜ νƒ€μž…μ„ 의미
    • λ‹€μ–‘ν•œ νƒ€μž… 듀을 ν•œ λ²ˆμ— λ¬Άμ–΄μ„œ μ„ μ–Έν•  수 μžˆλ‹€.
    • 단, μ„ μ–Έλœ μ—¬λŸ¬ νƒ€μž… 듀을 λͺ¨λ‘ μ‚¬μš©ν•΄μ•Όλ§Œ μ—λŸ¬λ°œμƒ ν•˜μ§€ μ•ŠλŠ”λ‹€ πŸ˜…


βœ”οΈ Intersection Types 예제

& μ—°μ‚°μžλ₯Ό μ΄μš©ν•΄ μ—¬λŸ¬ 개의 νƒ€μž… μ •μ˜λ₯Ό ν•˜λ‚˜λ‘œ ν•©μΉ˜λŠ” 방식

type Student = {
  name: string;
  score: number;
};

type Worker = {
  empolyeeId: number;
  work: () => void;
};

function internWork(person: Student & Worker) {
  console.log(person.name, person.empolyeeId, person.work());
}

internWork({
  name: "april",
  score: 1,
  empolyeeId: 123,
  work: () => {},
});