[TypeScript] Tuple type๊ณผ rest parameter

guยท2023๋…„ 8์›” 18์ผ

TypeScript

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

๐Ÿ’ป Tuple type

tuple์€ javascript์—์„œ๋Š” ์ง€์›ํ•˜์ง€์•Š๋Š” ํƒ€์ž…์œผ๋กœ, typescript์—์„œ๋Š” ๋ฐฐ์—ด ํƒ€์ž…์„ ๋ณด๋‹ค ํŠน์ˆ˜ํ•œ ํ˜•ํƒœ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” tupleํƒ€์ž…์„ ์ง€์›ํ•œ๋‹ค. ๋ช…์‹œ์ ์œผ๋กœ ์ง€์ •๋œ ํ˜•์‹์— ๋”ฐ๋ผ ์•„์ดํ…œ ์ˆœ์„œ๋ฅผ ์„ค์ •ํ•˜๊ณ , ์ถ”๊ฐ€๋˜๋Š” ์•„์ดํ…œ ๋˜ํ•œ tuple์— ๋ช…์‹œ๋œ ํƒ€์ž…๋งŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋‹ค.

  • ์˜ˆ์‹œ #1
let rule:[string,boolean]=['dog',true]
console.log(rule); // output : ["dog", true]

์œ„์˜ ์˜ˆ์‹œ #1์—์„œ ์ฒซ ์ž๋ฃŒ๋Š” ๋ฌด์กฐ๊ฑด string์ด๊ณ  ๋‘๋ฒˆ์งธ ์ž๋ฃŒ๋Š” ๋ฌด์กฐ๊ฑด boolean๋งŒ ํ—ˆ์šฉํ•ด์ฃผ๋ฉฐ ์™ธ์— ๋‹ค๋ฅธ ํƒ€์ž…์ด ๋“ค์–ด์˜ค๋ฉด ์—๋Ÿฌ๋กœ ์žก์•„์ค€๋‹ค.

๐Ÿ–ค rest parameter

-rest parameter: ๋งค๊ฐœ๋ณ€์ˆ˜ ์ด๋ฆ„ ์•ž์— ์„ธ ๊ฐœ์˜ ์  ...์„ ๋ถ™์—ฌ์„œ ์ •์˜ํ•œ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์˜๋ฏธํ•˜๋ฉฐ ํ•จ์ˆ˜์— ์ „๋‹ฌ๋œ ์ธ์ˆ˜๋“ค์˜ ๋ชฉ๋ก์„ ๋ฐฐ์—ด๋กœ ์ „๋‹ฌ๋ฐ›๋Š”๋‹ค.

  • ์˜ˆ์‹œ
let arr1 = [1,2,3]
let arr2 = [4,5]
let restArr=[...arr1,...arr2]
console.log(restArr)
  • typescript์—์„œ์˜ rest ํŒŒ๋ผ๋ฏธํ„ฐ
function ํ•จ์ˆ˜(...x :string[]){
  console.log(x)
}

typescript์—์„œ ํ•จ์ˆ˜์ •์˜ํ• ๋•Œ ํŒŒ๋ผ๋ฏธํ„ฐ ์™ผ์ชฝ์— ์  3๊ฐœ๋ฅผ ๋ถ™์ด๋ฉด ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ€ ๋ช‡ ๊ฐœ๋“ค์–ด์˜ฌ์ง€ ๋ชจ๋ฅธ๋‹ค๋Š” ๋œป์œผ๋กœ ์‚ฌ์šฉ๋œ๋‹ค.

  • typescript์—์„œ์˜ rest ํŒŒ๋ผ๋ฏธํ„ฐ + tuple
function ํ•จ์ˆ˜(...x:[string,number]){
	console.log(x)
}
ํ•จ์ˆ˜('kim',0318) 
ํ•จ์ˆ˜('kim',03,18) // ์—๋Ÿฌ
ํ•จ์ˆ˜('kim','gyu','ri') // ์—๋Ÿฌ

rest parameter๋ฅผ ์—„๊ฒฉํ•˜๊ฒŒ ์‚ฌ์šฉ๊ฐ€๋Šฅํ•˜๋‹ค. ์ผ๋ฐ˜ ํŒŒ๋ผ๋ฏธํ„ฐ 2๊ฐœ๋ฅผ ๋„ฃ๋Š” ๊ฒƒ๊ณผ ๊ธฐ๋Šฅ์ƒ ๋‹ค๋ฅผ ๋ฐ” ์—†์ง€๋งŒ ์ฐจ์ด๋Š” rest parameter๋ฅผ ์“ฐ๋ฉด ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ€ ์ „๋ถ€ array์— ๋‹ด๊ฒจ์„œ ์˜จ๋‹ค.

๐Ÿ–ค tuple ์˜ต์…˜

type codeNum = [number,number?,number?];
let Num01:codeNum = [10];
let Num02:codeNum = [10,20];
let Num03:codeNum = [10,20,30];
let err:codeNum = [10,20,30,40]; // ์—๋Ÿฌ

โ— ?์˜ต์…˜์€ array ์ค‘๊ฐ„์— ์˜ฌ์ˆ˜์—†๊ณ  ์•„์ดํ…œ์˜ ๋งˆ์ง€๋ง‰ ํ˜น์€ ๋งˆ์ง€๋ง‰๋ถ€ํ„ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

๐Ÿ–ค array 2๊ฐœ๋ฅผ spread์—ฐ์‚ฐ์ž๋กœ ํ•ฉ์น ๋•Œ ํƒ€์ž…์ง€์ •

let arr01 = [1,2,3]
let arr02:[number,number,...number[]] = [10,20,...arr01]

// rest parameter๋ž‘ ์œ ์‚ฌํ•˜๊ฒŒ ํ™œ์šฉ๊ฐ€๋Šฅ
let arr03 :[number, number, ...number[]] = [4,5,6,7,8,9,10]  
let arr:[string,number,...boolean] = ['์•„๋ฉ”๋ฆฌ์นด๋…ธ', 4000, true, false, true, true, false, true]

๐Ÿ–ค ํ™œ์šฉ

  • ํŒŒ๋ผ๋ฏธํ„ฐ์ค‘ ๋ฌธ์ž์™€ ์ˆซ์ž๋ฅผ ๋”ฐ๋กœ ๋ชจ์•„ ๋ฆฌํ„ดํ•ด์ฃผ๋Š” ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค์–ด๋ณด์ž. (ํŒŒ๋ผ๋ฏธํ„ฐ๋Š” ๊ฐฏ์ˆ˜์ œํ•œ์ด์—†๋‹ค.)
function ๋ถ„๋ฅ˜๊ธฐ(...x:(number|string)[]){
  let res:[string[],number[]]=[[],[]];
  x.forEach(item=>{
    if(typeof item==='string'){
      res[0].push(item)
    }else{
      res[1].push(item)
    }
  })
  return console.log(res)
}
๋ถ„๋ฅ˜๊ธฐ('๊ทœ',3,'๋ฆฌ',18) // output : [['๊ทœ','๋ฆฌ'],[3,18]]

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