๊ฐœ๋ฐœ/Etc...

[TypeScript] ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ๊ธฐ๋ณธ (Literal Types / Union Types / Intersection types)

๋ฐ(Ming) ๐Ÿˆ‍โฌ› 2022. 6. 8. 00:31
728x90
๋ฐ˜์‘ํ˜•

โ–ช Literal types

 

const userName1 = "Bob";

let userName2 = "Tom";

 

const๋Š” ์ƒ์ˆ˜๋กœ ๋ณ€ํ•˜์ง€ ์•Š๋Š” ๊ฐ’์„ ์„ ์–ธํ•  ๋•Œ, let๋Š” ์žฌํ• ๋‹น์ด ๊ฐ€๋Šฅํ•œ ๊ฐ’์„ ์„ ์–ธํ•  ๋•Œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. 

์ € ์ƒํƒœ์—์„œ VSC๊ฐ™์€ ์—๋””ํ„ฐ์—์„œ ๋งˆ์šฐ์Šค๋ฅผ ์˜ฌ๋ ค๋ณด๋ฉด const๋Š” "Bob"์ด๋ผ๊ณ  ์„ ์–ธ ๋œ ๊ฐ’์ด ๋œจ๊ณ , let์€ let userName2 : string์ด๋ผ๋Š” ํƒ€์ž… ๊ฐ’์ด ๋œน๋‹ˆ๋‹ค. let์€ ์–ธ์ œ๋“  ๋‹ค๋ฅธ ๊ฐ’์œผ๋กœ ๋ณ€ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. 

 

userName2 ์— ์ˆซ์ž๋ฅผ ๋„ฃ๊ณ  ์‹ถ๋‹ค๋ฉด? 

let userName2 : string | number = "Tom";

์ด๋ ‡๊ฒŒ ํƒ€์ž…์„ ๋‘˜ ๋‹ค ๋ช…์‹œํ•ด์ค๋‹ˆ๋‹ค. 

 

type Job = "police" | "developer" | "teacher";

interface User {
  name : string;
  job : Job;
  grade: 1 | 2 | 3;
}


const user : User = {
 name : "Bob",
 job: "developer"
 }

 

 

 

 

โ–ช Union types

์‹๋ณ„ ๊ฐ€๋Šฅํ•œ ์œ ๋‹ˆ์˜จ ํƒ€์ž…! gift๊ฐ€ car ์ผ์ˆ˜๋„ mobile ์ผ ์ˆ˜๋„ ์žˆ๋Š”๋ฐ, gift์˜ ๊ฒฝ์šฐ ์‹๋ณ„์ด ๊ฐ€๋Šฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ด๋Ÿฐ๊ฑธ ์œ ๋‹ˆ์˜จํƒ€์ž…์ด๋ผ๊ณ  ํ•œ๋‹ค.

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

interface Mobile {
  name : "mobile";
  color: string;
  call() : void;
 }
 
 function getGift(gift: Car | Mobile){
   //Car์—๋งŒ start()๊ฐ€ ์žˆ๊ธฐ๋•Œ๋ฌธ์— ์กฐ๊ฑด๋ฌธ์„ ์จ์ฃผ์ง€ ์•Š์œผ๋ฉด ์˜ค๋ฅ˜๊ฐ€ ๋‚œ๋‹ค.
   if(gift.name === "car"){
     gift.start();
   }else{
     gift.call();
 }
 
 //

 

 

 

 

โ–ช Intersection types

๊ต์ฐจํƒ€์ž…์€ "and" ๊ฐ™์€ ๋А๋‚Œ์ž…๋‹ˆ๋‹ค. 

interface Car {
    name : string;
    start() : void;
}

interface Toy {
  name : string;
  color: string;
  price: number;
 }
 
const toyCar : Toy & Car = {
 name : "ํƒ€์š”",
 start(){},
 color: "blue",
 
 //์œ„์˜ ๊ฐ™์ด ์š”์†Œ๋งŒ ์ ์–ด๋‘๋ฉด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. price๊ฐ€ ๋น ์กŒ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. 
 //Car๋Š” price๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์ง€ ์•Š์ง€๋งŒ ๊ต์ฐจ ํƒ€์ž…์€ ๋ชจ๋“  ์š”์†Œ๊ฐ€ ํ•˜๋‚˜๋กœ ํ•ฉ์ณ์ง€๋Š” ๊ฑธ ๋œปํ•˜๊ธฐ ๋•Œ๋ฌธ์— price๋„ ๋„ฃ์–ด์ค˜์•ผ ์˜ค๋ฅ˜๊ฐ€ ์•ˆ ์ƒ๊ธด๋‹ค
}

 

 

 

 

 

 

728x90