🌈 μ§„μ •ν•œ νƒ€μž…μŠ€ν¬λ¦½νŠΈμ˜ μ‹œμž‘! Union Type

AprilΒ·2022λ…„ 1μ›” 20일
0

πŸ’« Typescript

λͺ©λ‘ 보기
6/11
post-thumbnail

λ¦¬ν„°λŸ΄(Literal) Types

βœ”οΈ Literal Types 예제1

type Name = 'name';
let aprilName: Name;
aprilName = 'name';

βœ”οΈ Literal Types 예제2

function printText(s: string, alignment: "left" | "right" | "center") {
  // ...
}
printText("Hello world", "left");
printText("G'day mate", "centre"); // 이럴 경우 μ—λŸ¬λ‚¨. 
// λ‘λ²ˆμ§Έ μΈμžμ—λŠ” μ„Έκ°€μ§€μ˜ λ¬Έμžμ—΄ 쀑 ν•˜λ‚˜λ§Œ μž…λ ₯ν•  수 있기 λ•Œλ¬Έμ—!!


🌈 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: () => {},
});

profile
πŸš€ λ‚΄κ°€ 보렀고 μ“°λŠ” κΈ°μˆ λΈ”λ‘œκ·Έ

0개의 λŒ“κΈ€