Typescript Basics & Basic Types

Teasanยท2022๋…„ 9์›” 2์ผ
0

typescript

๋ชฉ๋ก ๋ณด๊ธฐ
9/13
post-thumbnail

๋ชฉ์ฐจ

  • enum ์—ด๊ฑฐํ˜•์œผ๋กœ ์ž‘์—…ํ•˜๊ธฐ
  • any ํƒ€์ž…
  • union ํƒ€์ž…
  • literal ํƒ€์ž…
  • aliases ํƒ€์ž… / ์‚ฌ์šฉ์ž ์ •์˜ ํƒ€์ž…
  • aliases ํƒ€์ž… ๋ฐ ๊ฐ์ฒด ํƒ€์ž…

โœง enum ์—ด๊ฑฐํ˜•์œผ๋กœ ์ž‘์—…ํ•˜๊ธฐ

  • enum ํƒ€์ž…์€ ๋‹ค๋ฅธ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์—๋„ ์กด์žฌํ•˜๋Š” ํƒ€์ž…์ด์ง€๋งŒ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ๋Š” ์กด์žฌํ•˜์ง€ ์•Š๋Š” ํƒ€์ž…์ด๋‹ค. ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ์—๋งŒ ์กด์žฌํ•˜๋Š” ์ด enum ํ‚ค์›Œ๋“œ์— ์‚ฌ์šฉํ•˜๋Š” enum์„ ์ƒ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ์‹๋ณ„์ž๋“ค์„ ์ค‘๊ด„ํ˜ธ ์Œ ์•ˆ์— ๋„ฃ๋Š” ๊ฒƒ์ด๋‹ค. ์—ด๊ฑฐํ˜• ํƒ€์ž…์€ ์—ด๊ฑฐ ๋ชฉ๋ก์„ ์ œ๊ณตํ•œ๋‹ค. ์ด ๋ชฉ๋ก์˜ ๋ผ๋ฒจ๋“ค์€ 0๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๋Š” ์ˆซ์ž๋กœ ๋ณ€ํ™˜๋˜๋ฉฐ, ์—ฌ๊ธฐ์—๋Š” ์ฝ”๋“œ ๋‚ด์—์„œ ์ž‘์—… ๊ฐ€๋Šฅํ•œ (์ธ๊ฐ„์ด ์ฝ์„ ์ˆ˜ ์žˆ๋Š”) ๋ผ๋ฒจ๋กœ ํ‘œํ˜„ ๋˜์–ด์žˆ๋‹ค.
const person = {
  name: "Maximilian",
  age: 30,
  hobbies: ["Sports", "Cooking"],
  role:,
};
  • ์œ„์˜ ์ฝ”๋“œ์™€ ๊ฐ™์€ ๊ฐ์ฒด ๋‚ด๋ถ€์˜ ์š”์†Œ์ธ role์— 'admin', 'read_only', 'author'๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ ์ž ํ•œ๋‹ค. ๊ฐ๊ฐ์˜ id๋Š” 'admin'์—์„œ๋Š” 0์œผ๋กœ ์„ค์ •ํ•˜๊ณ , ์ฝ๊ธฐ ์ „์šฉ 'read_only'์€ 1, ๊ทธ๋ฆฌ๊ณ  'author'์€ 2๋กœ ์„ค์ •ํ•œ๋‹ค.
const person = {
  name: "Maximilian",
  age: 30,
  hobbies: ["Sports", "Cooking"],
  role: 2, // author
};
  • ๊ทธ๋ฆฌ๊ณ  ์œ„์˜ ์‚ฌ๋ก€(์ˆซ์ž 2๋Š” 'author'์˜ id์ด๋‹ค.)์ฒ˜๋Ÿผ id ์ˆซ์ž๋กœ ์ •ํ™•ํ•˜๊ฒŒ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋‹ค. ํ•˜์ง€๋งŒ ์—ฌ๊ธฐ์„œ ํ•œ ๊ฐ€์ง€ ๋‹จ์ ์ด ์žˆ๋Š”๋ฐ ๋ฐ”๋กœ ์—ญํ• (role)์ด ์—†์„ ์ˆ˜๋„ ์žˆ๋Š” ์ˆซ์ž๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฐ€๋Šฅ์„ฑ์ด๋‹ค. ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋ฉด์„œ ๋‚˜์ค‘์—์„œ์•ผ role์„ ์ถ”์ถœํ•˜๊ณ  if ๊ฒ€์‚ฌ๋ฅผ ์ˆ˜ํ–‰ํ•˜๋ฉด ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค. ๋˜ํ•œ ๊ฐœ๋ฐœ์ž๋กœ์„œ ์ด ์‚ฌ์šฉ์ž์˜ role์ด ๋ฌด์—‡์ผ์ง€ ๋ฐ”๋กœ ์ดํ•ดํ•˜๊ธฐ ์–ด๋ ค์šธ ๊ฐ€๋Šฅ์„ฑ๋„ ์žˆ๋‹ค. 2๊ฐ€ 'author' ์ธ์ง€ 'admin' ์ธ์ง€๋ฅผ ์–ธ์ œ๋‚˜ ์™ธ์šฐ๊ณ  ์žˆ์ง€๋Š” ์•Š๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ์ฐจ๋ผ๋ฆฌ ์ธ๊ฐ„์ด ์ฝ์„ ์ˆ˜ ์žˆ๋Š” ์‹๋ณ„์ž๋กœ ๊ตฌ๋ถ„ํ•˜๋Š” ๊ฒƒ์ด ํ›จ์”ฌ ๋‚˜์„์ง€๋„ ๋ชจ๋ฅธ๋‹ค. ์–ด์ฉŒ๋ฉด ๋ฌธ์ž์—ด ์‹๋ณ„์ž๋ฅผ ์‚ฌ์šฉํ•ด๋ณผ ์ˆ˜๋„ ์žˆ์„ ๊ฒƒ์ด๋‹ค. ์•„๋ž˜์˜ ๊ฒฝ์šฐ๋ผ๋ฉด ์–ด๋–จ๊นŒ?
const person = {
  name: "Maximilian",
  age: 30,
  hobbies: ["Sports", "Cooking"],
  role: "READ ONLY USER",
};

...

if (person.role === "READ-ONLY-USER") {
  console.log('is read only');
}
  • ์œ„์˜ ์ฝ”๋“œ์˜ ๋ฌธ์ œ๋Š” "READ ONLY USER"์ฒ˜๋Ÿผ ๊ทธ์ € ๋‹จ์–ด๋กœ๋งŒ ์ด๋ฃจ์–ด์ ธ ์žˆ๋Š”์ง€, "READ-ONLY-USER" ์ฒ˜๋Ÿผ ๋ฐ‘์ค„์ด ์ณ์ ธ์žˆ๋Š”์ง€ ๋“ฑ์„ ์ •ํ™•ํžˆ ๊ธฐ์–ตํ•ด์„œ ํ™•์ธ์„ ํ•ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์— ์žˆ๋‹ค. ์ด๊ฒƒ์„ ์ถœ๋ ฅํ–ˆ์„ ๋•Œ "READ ONLY USER"์™€ "READ-ONLY-USER"๋Š” ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ์ œ๋Œ€๋กœ ์ž‘๋™๋˜์ง€ ์•Š์„ ๊ฒƒ์ด๋‹ค. ๋ฌธ์ž์—ด ์‹๋ณ„์ž๋Š” ์ด๋Ÿฌํ•œ ๋‹จ์ ์„ ๋‚ดํฌํ•˜๊ณ  ์žˆ๋‹ค. ์ด๋Ÿฐ ๊ฒฝ์šฐ, ๋ณดํ†ต์€ ์ „์—ญ ์ƒ์ˆ˜๋ฅผ ์ •์˜ํ•ด์„œ ์‚ฌ์šฉํ•  ๋•Œ๋„ ์žˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด,
const ADMIN = 0;
const READ_ONLY = 1;
const AUTHOR = 2;

const person = {
  name: "Maximilian",
  age: 30,
  hobbies: ["Sports", "Cooking"],
  role: ADMIN,
};
  • ์ด๋Ÿฐ ์‹์œผ๋กœ ์ „์—ญ ์ƒ์ˆ˜๋ฅผ ์ •์˜ํ•ด์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•  ์ˆ˜๋„ ์žˆ์„ ๊ฒƒ์ด๋‹ค. ๋ฌผ๋ก  ์ˆซ์ž๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์ฝ”๋“œ์˜ ์–‘๊ณผ ๋ฉ”๋ชจ๋ฆฌ ์ ์œ ๋ฅผ ๋‚ฎ์ถœ ์ˆ˜ ์žˆ์œผ๋‹ˆ, ๊ฐ๊ฐ์˜ ๊ฐ’์— ์ˆซ์ž๋ฅผ ํ• ๋‹นํ•˜๊ณ  role์— ํ•„์š”ํ•œ ์ƒ์ˆ˜๋ฅผ ๊ฐ€์ ธ๋‹ค ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ์–ด์ฉŒ๋ฉด ์šฐ๋ฆฌ์—๊ฒ ๊ฝค๋‚˜ ์ต์ˆ™ํ•œ ๋ฐฉ๋ฒ•์ผ ๊ฒƒ์ด๋‹ค.
const ADMIN = 0;
const READ_ONLY = 1;
const AUTHOR = 2;

const person = {
  name: "Maximilian",
  age: 30,
  hobbies: ["Sports", "Cooking"],
  role: ADMIN,
};

if (person.role === ADMIN) {
  console.log("is admin");
}
  • ํ•˜์ง€๋งŒ ์ด๋Ÿฐ ํŒจํ„ด์—๋Š” ๋‹จ์ ์ด ์žˆ๋‹ค. ๋ชจ๋“  ์ƒ์ˆ˜๋ฅผ ์ •์˜ํ•˜๊ณ  ๊ด€๋ฆฌํ•ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ๊ทธ๋ฆฌ๊ณ  enum์€ ์•ž์„œ ๋งํ•œ ํŒจํ„ด์˜ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” ํƒ€์ž…์ด๋‹ค.
enum Role
  • ๋จผ์ €, enum ํ‚ค์›Œ๋“œ๋กœ enum์„ ์ƒ์„ฑํ•˜๊ณ , ํ‚ค์›Œ๋“œ๋Š” ๋Œ€๋ฌธ์ž๋กœ ์‹œ์ž‘ํ•˜๋Š” Role๋กœ ์ง€์ •ํ•œ๋‹ค. enum ์—ญ์‹œ ์‚ฌ์šฉ์ž ์ง€์ • ํƒ€์ž…์ด๊ธฐ ๋•Œ๋ฌธ์— ์ด๋Ÿฌํ•œ ๋ฐฉ์‹์„ ๋”ฐ๋ฅด๋Š” ๊ฒƒ์ด๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ค‘๊ด„ํ˜ธ ์Œ์„ ์ž…๋ ฅํ•œ ๋’ค,
enum Role {
  ADMIN,
  READ_ONLY,
  AUTHOR,
}
  • ADMIN, READ_ONLY, AUTHOR, ๊ฐ™์€ ๊ฐ’์„ ์ง€์ •ํ•œ๋‹ค. ์ˆœ์„œ๋Œ€๋กœ ๊ฐ๊ฐ 0, 1, 2 ๋ผ๋Š” ์ˆซ์ž๊ฐ€ ํ• ๋‹น๋  ๊ฒƒ์ด๋‹ค.
enum Role {
  ADMIN,
  READ_ONLY,
  AUTHOR,
}

const person = {
  name: "Maximilian",
  age: 30,
  hobbies: ["Sports", "Cooking"],
  role: Role.ADMIN,
};
  • ๊ทธ๋ฆฌ๊ณ  ์•„๋ž˜ role ์—์„œ Role.ADMIN์œผ๋กœ ์ ‘๊ทผํ•˜์—ฌ ๊ฐ’์„ ์ง€์ •ํ•œ๋‹ค.
enum Role {
  ADMIN,
  READ_ONLY,
  AUTHOR,
}

const person = {
  name: "Maximilian",
  age: 30,
  hobbies: ["Sports", "Cooking"],
  role: Role.ADMIN,
};

...

if (person.role === Role.AUTHOR) {
  console.log("is author");
}
  • if ๋ฌธ์—์„œ role์ด AUTHOR ์ธ์ง€ ํ™•์ธํ•˜๊ณ  ์ฐธ์ด๋ฉด ์ฝ˜์†”์— ๋ฌธ์ž์—ด์„ ์ถœ๋ ฅํ•˜๋„๋ก ํ–ˆ๋‹ค. ์ง€๊ธˆ๊นŒ์ง€ ์ด ๋ชจ๋“  ์ž‘์—…์„ ๋ผ๋ฒจ์„ ์ˆซ์ž๋กœ ํ• ๋‹นํ•˜๊ฒŒ ํ•ด์ฃผ๋Š” enum์œผ๋กœ ์ˆ˜ํ–‰ํ•ด๋ณด์•˜๋‹ค. ํ•ด๋‹น ์ฝ”๋“œ๋ฅผ ์ปดํŒŒ์ผํ•œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‚ดํŽด๋ณด๋ฉด,
var Role;
(function (Role) {
  Role[(Role["ADMIN"] = 0)] = "ADMIN";
  Role[(Role["READ_ONLY"] = 1)] = "READ_ONLY";
  Role[(Role["AUTHOR"] = 2)] = "AUTHOR";
})(Role || (Role = {}));
var person = {
  name: "Maximilian",
  age: 30,
  hobbies: ["Sports", "Cooking"],
  role: Role.ADMIN,
};

...

if (person.role === Role.AUTHOR) {
  console.log("is author");
}
  • ์ปดํŒŒ์ผ๋œ ์ฝ”๋“œ๊ฐ€ ์žฌํ˜„๋˜๊ณ  ์žˆ์Œ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค. ์ˆซ์ž ๊ฐ’์„ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋Š” ํ•ด๋‹น ์ฝ”๋“œ ๋ธ”๋ก์—๋Š” ADMIN, READ_ONLY, AUTHOR ์†์„ฑ ๋“ฑ์ด ํฌํ•จ๋˜๋ฏ€๋กœ ๋‹ค์†Œ ๋ณต์žกํ•˜์ง€๋งŒ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ์—์„œ๋Š” ์•„์ฃผ ๊ฐ„๋‹จํ•˜๊ฒŒ ์ˆ˜ํ–‰์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
enum Role {
  ADMIN = 5,
  READ_ONLY = 100,
  AUTHOR = 200,
}
  • enum์˜ ๊ฒฝ์šฐ ๊ธฐ๋ณธ ๋™์ž‘์—๋งŒ ๊ตญํ•œ๋˜์ง€ ์•Š๋Š”๋‹ค. ํŠน์ • ์ด์œ ๋กœ ์ธํ•ด์„œ ์‹œ์ž‘ ์ˆซ์ž๋ฅผ 0์œผ๋กœ ์‹œ์ž‘ํ•˜์ง€ ๋ชปํ•˜๋Š” ๊ฒฝ์šฐ, ์‹๋ณ„์ž์— ๋“ฑํ˜ธ๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ๋‹ค๋ฅธ ์ˆซ์ž๋ฅผ ์ž…๋ ฅํ•  ์ˆ˜๋„ ์žˆ๋‹ค. ์‹œ์ž‘ ๊ฐ’์ด 0์ด ์•„๋‹ˆ๋ผ 5๋ผ๋ฉด ์ด ์‹œ์ž‘ ๊ฐ’ ์‹๋ณ„์ž ๋‹ค์Œ์˜ ๋‹ค๋ฅธ ์‹๋ณ„์ž ๊ฐ’์€ ์‹œ์ž‘ ๊ฐ’์œผ๋กœ๋ถ€ํ„ฐ ์ฆ๊ฐ€์‹œ์ผœ์„œ ํ• ๋‹นํ•ด์ค˜์•ผ ํ•œ๋‹ค. ์ด๋ฅผํ…Œ๋ฉด ์ด์ „์˜ ๊ธฐ๋ณธ ๋™์ž‘์ด 0, 1, 2 ์˜€๋‹ค๋ฉด 5๋กœ ์‹œ์ž‘ ๊ฐ’์„ ํ• ๋‹นํ•œ ์ง€๊ธˆ์€ 5, 6, 7์ด ๋˜๋Š” ๊ฒƒ์ด๋‹ค. ๋ฌผ๋ก  enum์—๋Š” ์ˆซ์ž ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ํ…์ŠคํŠธ๋ฅผ ํ• ๋‹นํ•  ์ˆ˜๋„ ์žˆ๊ณ , ํ˜ผํ•ฉ๋„ ๊ฐ€๋Šฅํ•˜๋‹ค.
enum Role {
  ADMIN = "ADMIN",
  READ_ONLY = 1,
  AUTHOR = "200",
}
  • ์–ด๋–ค ๊ฒƒ์ด๋“  ํ• ๋‹น์ด ๊ฐ€๋Šฅํ•˜๊ณ , ์ˆซ์ž๊ฐ€ ์ฆ๊ฐ€ํ•˜๊ธฐ ์‹œ์ž‘ํ•˜๋Š” ๊ธฐ๋ณธ ๊ฐ’(ADMIN)์ด 0์ด์ง€๋งŒ ๋™์ž‘์„ ๋‹ค๋ฅธ ์‹์œผ๋กœ ๊ตฌ์„ฑํ•˜๊ธฐ ์œ„ํ•ด์„  ๋ฌธ์ž์—ด์— ์ด์–ด์„œ ์ˆซ์ž๋ฅผ ์ž…๋ ฅํ•  ์ˆ˜๋„ ์žˆ๊ณ  ๋‹ค๋ฅธ ๋ฌธ์ž์—ด์„ ์ž…๋ ฅํ•ด๋„ ๋œ๋‹ค. ์ด๋ ‡๊ฒŒ enum์œผ๋กœ ์ •์˜ํ•œ Role์€ role ํƒ€์ž…์„ ์ฐธ์กฐํ•˜๊ฑฐ๋‚˜, ์‚ฌ์šฉ์ž ์ •์˜ ํƒ€์ž…์„ ์ฐธ์กฐํ•˜๊ฑฐ๋‚˜, ์ƒ์„ฑํ•œ ์‚ฌ์šฉ์ž ์ •์˜ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ์žฅ์ ์ด ์žˆ๊ณ  ์ด๊ฒƒ์€ enum์˜ ๊ฐ•์ ์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ธ๊ฐ„์ด ์ฝ์„ ์ˆ˜ ์žˆ๊ณ  ๋ฐฑ๊ทธ๋ผ์šด๋“œ์— ๋งคํ•‘๋œ ๊ฐ’์ด ์žˆ๋Š” ์‹๋ณ„์ž๊ฐ€ ํ•„์š”ํ•  ๋•Œ enum์˜ ๊ฐ•์ ์„ ์šฐ๋ฆฌ๋Š” ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

โœง any ํƒ€์ž…

  • any ํƒ€์ž…์€ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ์—์„œ ํ• ๋‹นํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ€์žฅ ์œ ์—ฐํ•œ ํƒ€์ž…์ด๋‹ค. ์ด ํƒ€์ž…์€ ๋ชจ๋“  ์ข…๋ฅ˜์˜ ๊ฐ’์„ ์ €์žฅํ•˜๊ณ , ํƒ€์ž… ๋ฐฐ์ •๋„ ๋”ฑํžˆ ํ•„์š”ํ•˜์ง€ ์•Š๋‹ค. ๊ทธ๋ฆฌ๊ณ  any ํƒ€์ž…์„ ์‚ฌ์šฉํ•˜๋”๋ผ๋„ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ์— ์•„๋ฌด๋Ÿฐ ๋ฌธ์ œ๊ฐ€ ๋˜์ง€ ์•Š๋Š”๋‹ค.

any ํƒ€์ž…์˜ ๋ฌธ์ œ์ 

  • any๋Š” ์•„์ฃผ ์œ ์—ฐํ•˜๊ณ  ํ›Œ๋ฅญํ•œ ํƒ€์ž…์ฒ˜๋Ÿผ ๋ณด์ด์ง€๋งŒ, ์ด๊ฒƒ์ด ์ง€๋‹Œ ํฐ ๋‹จ์  ๋•Œ๋ฌธ์— any๋ฅผ ๊ฐ€๋Šฅํ•œ ์“ฐ์ง€ ์•Š์•„์•ผ ๊ฒ ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๊ฒŒ ๋  ๊ฒƒ์ด๋‹ค. ์™œ๋ƒํ•˜๋ฉด ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‚ฌ์šฉํ•จ์œผ๋กœ์จ ๊ฐ€์ง€๊ฒŒ ๋˜๋Š” ๋ชจ๋“  ์žฅ์ ์„ any๊ฐ€ ์ƒ์‡„์‹œ์ผœ ๊ทธ์ € ๋ฐ”๋‹๋ผ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ์™€ ๋‹ค๋ฅผ ๋ฐ”๊ฐ€ ์—†๊ฒŒ ๋˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. any ๋˜๋Š” any ๋ณ€์ˆ˜๊ฐ€ ์–ด๋–ค ๊ฐ’๋„ ์ €์žฅํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ๊ฒ€์‚ฌํ•  ๋ถ€๋ถ„์ด ์—†์–ด์ง„๋‹ค. ๋”ฐ๋ผ์„œ any๋ฅผ ์‚ฌ์šฉํ•ด์•ผ๋งŒ ํ•˜๋Š” ๋ช‡ ๊ฐ€์ง€ ์ด์œ ๊ฐ€ ์žˆ์„ ๋•Œ์—๋งŒ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค. ์ด๋ฅผ ํ…Œ๋ฉด ์–ด๋– ํ•œ ๊ฐ’์ด๋‚˜ ์ข…๋ฅ˜์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ์–ด๋””์— ์ €์žฅ๋ ์ง€ ์ „ํ˜€ ์•Œ ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ๋ฅผ ๋Œ€๋น„ํ•˜๊ฑฐ๋‚˜, ๋Ÿฐํƒ€์ž„ ๊ฒ€์‚ฌ๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒฝ์šฐ ๋„์ค‘์— ํŠน์ • ๊ฐ’์— ์ˆ˜ํ–‰ ํ•˜๋Š” ์ž‘์—…์˜ ๋ฒ”์œ„๋ฅผ ์ขํž ๋•Œ์—๋งŒ ๋ง์ด๋‹ค. ๊ทธ์™ธ์—๋Š” any ํƒ€์ž…์„ ๊ฐ€๋Šฅํ•œ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฒŒ ์ข‹๋‹ค.

โœง union ํƒ€์ž…

  • ์ˆซ์ž์™€ ๋ฌธ์ž์—ด๋กœ ์ž‘์—… ๊ฐ€๋Šฅํ•œ ์œ ์—ฐํ•œ ์กฐํ•ฉ์˜ ํ•จ์ˆ˜๋ฅผ ํฌํ•จํ•˜๋Š” ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ๋„๋ก ์šฐ๋ฆฌ๋Š” union ํƒ€์ž…์„ ์‚ฌ์šฉํ•ด๋ณด๋ ค๊ณ  ํ•œ๋‹ค.
function combine(input1: number, input2: number) {
  const result = input1 + input2;
  return result;
}

const combinedAges = combine(30, 26);
console.log(combinedAges); // 56

const combinedNames = combine("Max", "Anna");

console.log(combinedNames); // error !!!!
  • ์œ„์˜ ์ฝ”๋“œ์ธ ๊ฒฝ์šฐ, ๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค. ์ง€๊ธˆ์€ ํ•จ์ˆ˜์—์„œ ๋ฐ›๋Š” ๋งค๊ฐœ๋ณ€์ˆ˜ ๋ชจ๋‘ ์ˆซ์ž ํƒ€์ž…์œผ๋กœ ์„ค์ •๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ˆซ์ž๋กœ ์ž‘์—…์„ ํ•˜๋Š” ๊ฒฝ์šฐ ํ•ด๋‹น ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ๋ฌธ์ž์—ด๋กœ ์ž‘์—…์„ ํ•˜๋Š” ๊ฒฝ์šฐ, ์ฆ‰์‹œ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๋ฌผ๋ก , ๋งค๊ฐœ ๋ณ€์ˆ˜์˜ ํƒ€์ž…์„ ๋ฌธ์ž์—ด๋กœ ๋ณ€ํ™˜ํ•  ์ˆ˜๋„ ์žˆ์ง€๋งŒ ๊ทธ๋ ‡๊ฒŒ ๋˜๋ฉด ์ˆซ์ž๋กœ ์ž‘์—…์„ ํ•  ์ˆ˜ ์—†๊ฒŒ ๋œ๋‹ค. ์ด๋Ÿด ๋•Œ ์šฐ๋ฆฌ๋Š” union ํƒ€์ž…์„ ์‚ฌ์šฉํ•ด์„œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค.
function combine(input1: number | string, input2: number | string) {
  const result = input1 + input2;

  return result;
}

const combinedAges = combine(30, 26);
console.log(combinedAges); // 56

const combinedNames = combine("Max", "Anna");
console.log(combinedNames); // MaxAnna
  • ๋‘ ์ข…๋ฅ˜(์ˆซ์ž, ๋ฌธ์ž์—ด)์˜ ๊ฐ’์„ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š” ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์œ ์—ฐํ•˜๊ฒŒ ๋ฐ›์•„์˜ค๊ธฐ ์œ„ํ•ด์„œ๋Š” union ํƒ€์ž…์„ ์‚ฌ์šฉํ•˜์—ฌ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ์—์„ธ ์ˆซ์ž๋‚˜ ๋ฌธ์ž์—ด ์ค‘ ํ•˜๋‚˜๋ฅผ ์‚ฌ์šฉํ•ด๋„ ๊ดœ์ฐฎ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๋ ค์•ผ ํ•œ๋‹ค. ์ด๋•Œ ์šฐ๋ฆฌ๋Š” ํŒŒ์ดํ”„ ๊ธฐํ˜ธ| ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋‹ค๋ฅธ ํƒ€์ž…์„ ์ž…๋ ฅํ•˜๋ฉด ๋œ๋‹ค. ์ด์ฒ˜๋Ÿผ ์˜ˆ์‹œ์˜ ๋‘ ๊ฐ€์ง€ ์ด์ƒ์˜ ํƒ€์ž…์ด๋‚˜ ํ˜น์€ ๊ทธ ์ด์ƒ์˜ ํƒ€์ž…์„ ํ•„์š”ํ•œ ๋งŒํผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค. ํ•˜์ง€๋งŒ ๋”ํ•˜๊ธฐ ์—ฐ์‚ฐ์ž์—์„œ๋Š” '๋ฌธ์ž์—ด'์ด๋‚˜ '์ˆซ์ž' ํƒ€์ž…์„ ์ ์šฉํ•  ์ˆ˜ ์—†๋‹ค๋Š” ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. ๋ฌผ๋ก  ๋”ํ•˜๊ธฐ ์—ฐ์‚ฐ์ž๋Š” ์ˆซ์ž์™€ ๋ฌธ์ž์—ด ๋ชจ๋‘ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ๋ฌธ์ œ๊ฐ€ ์—†์–ด์•ผ ํ•˜์ง€๋งŒ, ๋”ํ•˜๊ธฐ ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋Š” ํƒ€์ž…๋„ ์žˆ์„ ๊ฒƒ์ด๋ผ๊ณ  ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋Š” ์ดํ•ดํ•˜๊ณ  ์žˆ๋Š” ๊ฒƒ์ด๋‹ค. ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๊ฐ„๋‹จํ•œ ๋Ÿฐํƒ€์ž„ ๊ฒ€์‚ฌ๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ์ˆซ์ž ํƒ€์ž…์ผ ๋•Œ์™€ ๋ฌธ์ž์—ด ํƒ€์ž…์ผ ๋•Œ๋ฅผ ๊ฐ๊ฐ ๋‹ค๋ฅด๊ฒŒ ์—ฐ์‚ฐํ•˜์—ฌ ๋ฐ˜ํ™˜ํ•  ์ˆ˜ ์žˆ๋‹ค.
function combine(input1: number | string, input2: number | string) {
  let result;
  // ๋Ÿฐํƒ€์ž„ ๊ฒ€์‚ฌ ์ถ”๊ฐ€
  if (typeof input1 === "number" && typeof input2 === "number") {
    // number type
    result = input1 + input2;
  } else {
    // string type
    result = input1.toString() + input2.toString();
  }
  return result;
}

const combinedAges = combine(30, 26);
console.log(combinedAges); // 56

const combinedNames = combine("Max", "Anna");
console.log(combinedNames); // MaxAnna
  • ์ด์ œ ๋‘ ๋ฌธ์ž์—ด์„ ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋”์ด์ƒ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š”๋‹ค.

์ •๋ฆฌ

  • ์ฝ”๋“œ์˜ ์–ด๋Š ์œ„์น˜์—์„œ๋“  ํ•จ์ˆ˜ ๋‚ด์—์„œ ์ˆ˜ํ–‰ํ•˜๋Š” ์ž‘์—…๊ณผ ๊ด€๋ จํ•˜์—ฌ ๋ณด๋‹ค ์œ ์—ฐํ•˜๊ฒŒ ์œ ๋‹ˆ์–ธ ํƒ€์ž…์„ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. (๋ฌผ๋ก  ์ถ”๊ฐ€์ ์ธ ๋Ÿฐํƒ€์ž„ ๊ฒ€์‚ฌ๋Š” union ํƒ€์ž…์„ ์‚ฌ์šฉํ•˜์—ฌ ์ž‘์—…ํ•  ๋•Œ์— ์ข…์ข… ํ•„์š”ํ•œ ๋ถ€๋ถ„์ด๋‹ˆ ๊ธฐ์–ตํ•ด๋‘์ž.) ์ด์ฒ˜๋Ÿผ union ํƒ€์ž…์„ ์‚ฌ์šฉํ•˜๋ฉด ์ฝ”๋“œ์— ์ ์šฉํ•œ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ๋ณด๋‹ค ์œ ์—ฐํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ์ด๋ฅผ ์‚ฌ์šฉํ–ˆ์„ ๋•Œ ํƒ€์ž…์— ๋”ฐ๋ผ ํ•จ์ˆ˜ ๋‚ด์— ๋‹ค๋ฅธ ๋กœ์ง์„ ์ ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ํ•จ์ˆ˜๊ฐ€ ์—ฌ๋Ÿฌ ์œ ํ˜•์˜ ๊ฐ’์œผ๋กœ ์ž‘๋™ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค. ๋ฌผ๋ก  ํƒ€์ž…์— ๋”ฐ๋ผ ์กฐ๊ธˆ์”ฉ ๋‹ฌ๋ผ์ง€๋ฏ€๋กœ union ํƒ€์ž…์œผ๋กœ ์ž‘์—…ํ•  ๋•Œ ์œ„์˜ ๊ฒฝ์šฐ์ฒ˜๋Ÿผ ์ข…์ข… ๋Ÿฐํƒ€์ž„ ๊ฒ€์‚ฌ๊ฐ€ ํ•„์š”ํ•œ ๊ฒฝ์šฐ๋„ ์žˆ๊ณ , ํ”„๋กœ๊ทธ๋žจ์— ๋”ฐ๋ผ ๋Ÿฐํƒ€์ž„ ๊ฒ€์‚ฌ๋ฅผ ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š์•„๋„ union ํƒ€์ž…์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ๋„ ์žˆ๋‹ค. ๋‹จ์ง€ ๊ตฌ์„ฑํ•˜๋Š” ๋กœ์ง์ด ์–ด๋–ค ์‹์ด๋ƒ์— ๋”ฐ๋ผ ๋‹ฌ๋ฆฐ ๋ฌธ์ œ์ด๋‹ค.

โœง aliases ํƒ€์ž…๊ณผ ์‚ฌ์šฉ์ž ์ •์˜ ํƒ€์ž…

aliases ํƒ€์ž… ์ ์šฉ ์ „

function combine(
  input1: number | string,
  input2: number | string,
  resultConversion: "as-number" | "as-text" // ํŠน์ • ๋ฌธ์ž์—ด์„ union ํƒ€์ž…์œผ๋กœ ์ง€์ •
) {
  let result;
  if (
    (typeof input1 === "number" && typeof input2 === "number") ||
    resultConversion === "as-number"
  ) {
    result = +input1 + +input2; // ์—๋Ÿฌ๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด์„œ ๋ฏธ๋ฆฌ ์ˆซ์ž๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ๋”ํ•ด์คŒ.
  } else {
    result = input1.toString() + input2.toString();
  }
  return result;
}

aliases ํƒ€์ž… ์ ์šฉ ํ›„

// โšก๏ธ
type Combinable = number | string;
type ConversionDescriptor = "as-number" | "as-text";
// โšก๏ธ

function combine(
  input1: Combinable,
  input2: Combinable,
  resultConversion: ConversionDescriptor
) {
  let result;
  if (
    (typeof input1 === "number" && typeof input2 === "number") ||
    resultConversion === "as-number"
  ) {
    result = +input1 + +input2;
  } else {
    result = input1.toString() + input2.toString();
  }
  return result;
}
  • aliases ํƒ€์ž…์€ ๋‚ด๊ฐ€ ์ •ํ•˜๊ณ  ์‹ถ์€ ๋ณ„์นญ์œผ๋กœ ์ €์žฅํ•˜๊ณ ์ž ํ•˜๋Š” ๋ชจ๋“  ํƒ€์ž…์˜ ์„ค์ •์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
type Combinable = number | string;
type ConversionDescriptor = "as-number" | "as-text";

โœง aliases ํƒ€์ž… ๋ฐ ๊ฐ์ฒด ํƒ€์ž…

  • ํƒ€์ž… ๋ณ„์นญ์„ ์‚ฌ์šฉํ•˜์—ฌ ํƒ€์ž…์„ ์ง์ ‘ โ€œ์ƒ์„ฑโ€ํ•  ์ˆ˜ ์žˆ๋‹ค. ์œ ๋‹ˆ์˜จ ํƒ€์ž…์„ ์ €์žฅํ•˜๋Š” ๊ฒƒ๋งŒ ๊ฐ€๋Šฅํ•œ ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ๋ณต์žกํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ์ฒด ํƒ€์ž…์—๋„ ๋ณ„์นญ์„ ๋ถ™์ผ ์ˆ˜ ์žˆ๋‹ค.
type User = { name: string, age: number };
const u1: User = { name: "Max", age: 30 }; // this works!
  • ํƒ€์ž… ๋ณ„์นญ์„ ์‚ฌ์šฉํ•˜๋ฉด ๋ถˆํ•„์š”ํ•œ ๋ฐ˜๋ณต์„ ํ”ผํ•˜๊ณ  ํƒ€์ž…์„ ์ค‘์‹ฌ์—์„œ ๊ด€๋ฆฌ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด,
function greet(user: { name: string, age: number }) {
  console.log("Hi, I am " + user.name);
}

function isOlder(user: { name: string, age: number }, checkAge: number) {
  return checkAge > user.age;
}
  • ๋ผ๋Š” ํƒ€์ž… ์ง€์ •์„ aliases ํƒ€์ž…์œผ๋กœ ๊ด€๋ฆฌํ•˜๋ฉด
type User = { name: string, age: number };

function greet(user: User) {
  console.log("Hi, I am " + user.name);
}

function isOlder(user: User, checkAge: number) {
  return checkAge > user.age;
}
  • ์ด๋ ‡๊ฒŒ ๋‹จ์ˆœํ™” ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.

โœฆ ์ถœ์ฒ˜


๐Ÿšจ ํ•ด๋‹น ํฌ์ŠคํŒ…์€ Udemy์˜ Typescript :๊ธฐ์ดˆ๋ถ€ํ„ฐ ์‹ค์ „ํ˜• ํ”„๋กœ์ ํŠธ๊นŒ์ง€ with React + NodeJS ๊ฐ•์˜๋ฅผ ๋ฒ ์ด์Šค๋กœ ํ•œ ๊ธฐ๋ก์ž…๋‹ˆ๋‹ค.
โœ๐Ÿป ๊ฐ•์˜ git repo ๋ฐ”๋กœ๊ฐ€๊ธฐ

profile
์ผ๋‹จ ๊ณต๋ถ€๊ฐ€ '์ ์„ฑ'์— ๋งž๋Š” ๊ฐœ๋ฐœ์ž. ๊ทผ์„ฑ์žˆ์Šต๋‹ˆ๋‹ค.

0๊ฐœ์˜ ๋Œ“๊ธ€