TypeScript/ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ TypeScript

ํ•„์ˆ˜ ํƒ€์ž…! Discriminated Union

Rainbow๐ŸŒˆCoder 2022. 4. 15. 17:43
728x90

์ฐจ๋ณ„ํ™”(๊ตฌ๋ถ„) ํ•  ์ˆ˜ ์žˆ๋Š” Union

 

์•„๋ž˜ ์ฝ”๋“œ๋ฅผ ๊ฐœ์„ ํ•ด๋ณด์ž

type SuccessState = {
  response: {
    body: string;
  };
};

type FailState = {
  reason: string;
};

type LoginState = SuccessState | FailState;


function login(): SuccessState | FailState {
  return {
    response: {
      body: "logged in!",
    },
  };
}

function printLoginState(state: LoginState) {
  if ("response" in state) {
    console.log(`๐ŸŽ‰ ${state.response.body}`);
  } else {
    console.log(`๐Ÿ˜ญ ${state.reason}`);
  }
}
let ์ž…์žฅ: SuccessState = {
  response: {
    body: "์ž…์žฅ์™„๋ฃŒ!",
  },
};

printLoginState(์ž…์žฅ); //๐ŸŽ‰ ์ž…์žฅ์™„๋ฃŒ!

 

์œ ๋‹ˆ์˜จ ํƒ€์ž…์„ ์‚ฌ์šฉํ•  ๋•Œ, ์–ด๋–ค ์ผ€์ด์Šค๋“  ๊ณตํ†ต ํ”„๋กœํผํ‹ฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์Œ์œผ๋กœ์„œ ์กฐ๊ธˆ ๋” ๊ตฌ๋ถ„ํ•˜๊ฒŒ ์‰ฝ๊ฒŒ ๋งŒ๋“ค์–ด์ฃผ์ž.

์•„๋ž˜์™€ ๊ฐ™์ด

type SuccessState = {
  result: "success";
  response: {
    body: string;
  };
};

type FailState = {
  result: "fail";
  reason: string;
};

type LoginState = SuccessState | FailState;

function login(): SuccessState | FailState {
  return {
    result: "success",
    response: {
      body: "logged in!",
    },
  };
}

function printLoginState(state: LoginState) {
  if (state.result == "success") {
    console.log(`๐ŸŽ‰ ${state.response.body}`);
  } else {
    console.log(`๐Ÿ˜ญ ${state.reason}`);
  }
}
let ์ž…์žฅ: SuccessState = {
  result: "success",
  response: {
    body: "์ž…์žฅ์™„๋ฃŒ!",
  },
};

printLoginState(์ž…์žฅ); //๐ŸŽ‰ ์ž…์žฅ์™„๋ฃŒ!
728x90