티스토리 뷰

TypeScript

[TypeScript] Rest Parameters

Dongi 2022. 1. 16. 19:24

안녕하세요 동기 여러분! 오늘은 레스트 매개 변수(Rest Parameter)에 대해 알아보고 타입 선언을 하는 방법에 대해 알아보겠습니다!

 

Rest Parameters

레스트 매개 변수는 매개 변수의 수의 정해 놓지 않고 사용자가 넣고 싶은 독립 변수의 수만큼 넣을 수 있도록 도와주는 기능입니다.

 


 

사용 방법

function whatISay(me, ...say) {
  let output = me;
  for(let i = 0; i < say.length; i++) {
    output = output.concat(say[i]);
  }
  return output;
}
  • ...say가 바로 레스트 매개 변수(Rest Parameter)입니다.
  • 함수 whatIsay에 매겨 변수 me와 , ...say를 설정
  • 매개변수 me를 output에 선언
  • for문을 이용해 인덱스 번호 i에 대한 설정을 해주는데 ...say가 배열로 사용이 되기 때문에 가능(레스트 매개 변수는 배열이지만 그에 들어가는 값 독립 변수는 실제 배열은 아님)
  • output에 배열을 합치기 위해 .concat 메서드를 사용함
  • output을 리턴값으로 돌려줌

 


 

타입 선언

값이 숫자로 나오게 함수 코드를 만들었는데 엉뚱한 독립 변수가 들어와서 원하는 값을 얻지 못한다면 상당히 아쉬울 것입니다. 그래서 타입 선언을 해야 합니다.

 

위 코드를 가져와서 레스트 매개 변수에 타입 선언을 해보겠습니다.

function whatISay(me, ...say: string[]) {
  let output = me;
  for(let i = 0; i < say.length; i++) {
    output = output.concat(say[i]);
  }
  return output;
}
  • 레스트 매개 변수는 배열이기 때문에 타입 선언 시 [] 대괄호(brackets)를 꼭 넣어 주어야 합니다.

 


예시와 잘 작동하는지 검사

들어오는 숫자들 다 곱해서 값을 주는 코드를 만들어 보았습니다.

function multiplyNums(...nums){
    let output = 1;
    for(let i = 0; i < nums.length; i++){
        output *= 1 * nums[i];
    }
    return output;
}

숫자들을 넣어서 레스트 파라미터가 잘 작동하는지 알아보겠습니다.

잘 작동합니다.

 


 

타입 선언 후 컴파일링

function multiplyNums(...nums: number[]): number{
    let output = 1;
    for(let i = 0; i < nums.length; i++){
        output *= 1 * nums[i];
    }
    return output;
}
  • 레스트 매개 변수 ...nums에 숫자 타입을 선언하여 들어갈 독립 변수들이 숫자가 아니면 에러가 뜨도록 설정하고
  • 함수 multiplyNum에도 숫자 타입을 선언하여 리턴값이 숫자가 아니면 에러가 뜨도록 설정했습니다.

 

숫자가 아닌 문자나 불린을 넣어서 컴파일링을 해보겠습니다.

타입이 문자인 독립 변수는 타입이 숫자인 매개 변수에 선언할 수 없다라고 뜹니다.

이상한 건 두 번째 독립 변수인 불린 타입 true에는 아무런 반응이 없습니다. 그래서 아래에 true를 먼저 넣고 컴파일링을 해보았습니다.

 

타입이 불린인 독립 변수는 타입이 숫자인 매개 변수에 선언할 수 없다라고 뜹니다.

이번에도 역시 두 번째 독립 변수에 대한 반응은 없었습니다.

 


 

오늘의 느낌

타입스크립트... 뭔가 좀 허술한 느낌인데 기분 탓인가

'TypeScript' 카테고리의 다른 글

[TypeScript] Enums  (0) 2022.01.17
[TypeScript] Spread Syntax  (0) 2022.01.16
[TypeScript] Array Type Inference  (0) 2022.01.16
[TypeScript] Tuples  (0) 2022.01.15
[TypeScript] Multi-dimensional Arrays  (0) 2022.01.15
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
글 보관함