[TypeScript] tuple type으로 타입지정 문제

2022. 12. 31. 13:56CodingTest/TypeScript Q

(문제1)

여러분이 최근에 사먹은 음식의 1. 이름 2. 가격 3. 맛있는지여부를 array 자료에 담아보고 타입지정까지 해보십시오.

오늘 배운 tuple 타입으로 타입지정합시다. 

쉬워서 답은 생략합니다. 

 

(예시) [ '동서녹차', 4000, true ] 이런 자료 만들고 타입지정하라는 소리입니다.

let arr :[string, number, boolean] = [ '동서녹차', 4000, true ]

 

 

(숙제2)

이렇게 생긴 자료는 타입지정 어떻게 해야할까요?

let arr = ['동서녹차', 4000, true, false, true, true, false, true]

몇개인지는 모르겠지만 true와 false가 셋째 자료부터 잔뜩 들어올 수 있다고 합니다. 

tuple 타입과 spread 연산자를 써보도록 합시다. 

type Arr = [string, number, ...boolean[]]
let arr :Arr = ['동서녹차', 4000, true, false, true, true, false, true]; 

 

 

(숙제3)

함수에 타입지정을 해보도록 합시다.

function 함수(){
  
}

1. 이 함수의 첫째 파라미터는 문자,

2. 둘째 파라미터는 boolean,

3. 셋째 파라미터부터는 숫자 또는 문자가 들어와야합니다. 

(조건) tuple 타입과 rest parameter를 사용해봅시다.

더보기
function 함수(...rest :[string, boolean, ...(number|string)[] ]){
}

함수('a', true, 6, 3, '1', 4)

 

 

(숙제4)

다음과 같은 문자/숫자 분류기 함수를 만들어보십시오.

파라미터 중 문자만 모아서 [] 에 담아주고, 숫자만 모아서 [] 에 담아주는 함수가 필요합니다.

문자 숫자 외의 자료는 입력불가능하고 파라미터 갯수 제한은 일단 없습니다. 

함수 만들어보시고 함수의 파라미터/return 타입지정도 확실하게 해봅시다. 

 

(동작예시)

함수('b', 5, 6, 8, 'a') 이렇게 사용할 경우 이 자리에 [ ['b', 'a'], [5, 6, 8] ] 이 return 되어야합니다.

(조건) return타입은 tuple 타입으로 해주세요

더보기
function 함수(...rest :(string|number)[]){

  let result :[string[], number[]] = [[],[]];

  rest.forEach((a)=>{
    if (typeof a === 'string') {
      result[0].push(a)
    } else {
      result[1].push(a)
    }
  })

  return result;  
} 

1. 함수 만들고 파라미터는 몇개가 들어올지 모르니 rest parameter 썼고 파라미터 타입은 (string|number)[] 으로 지정했습니다.

2. 결과를 저장할 result라는 변수를 만들고 기본값은 [[], []] 이렇게 만들었고 그거 타입지정은 tuple type을 활용했습니다.

3. rest 파라미터에 forEach()반복문 돌렸고 타입이 string이면 result[0]에 추가해주고 number면 result[1]에 추가해줬습니다.

4. return 하면 타입은 알아서 지정이 잘됩니다.