본문 바로가기
개인공부/Typescript 공부

Typescript 함수

by 강물둘기 2023. 3. 1.

* 조시 골드버그의 러닝 타입스크립트라는 책을 읽고 정리하면서 코드를 작성해본 내용입니다.

 

 

타입스크립트를 사용할 때 함수의 매개변수, 반환값에도 타입을 지정할 수 있다.

1. 매개변수

매개변수에 타입을 지정하지 않으면 어떤 타입의 값이 들어올지 알 수 없는 any타입으로 지정된다.

위의 코드는 정상적으로 실행은 되겠지만 타입스크립트의 타입검사 기능을 사용하지 못하는 코드이다. 타입스크립트의 보호를 받기위해 타입을 지정해 주는것이 좋다.

 

 

필수 매개변수

자바스크립트에서는 인수의 수와 상관없이 함수를 호출할 수 있지만,

타입스크립트에서는 선언된 필수 매개변수가 없거나 선언한 개수보다 많으면 오류가 발생한다.

 

 

선택적 매개변수

타입 애너테이션 : 앞에 ? 를 추가하면 선택적 매개변수로 설정할 수 있다. 선택적 매개변수로 설정된 매개변수는 암묵적으로 매개변수의 타입과 undefined의 유니언 타입으로 설정된다.

 

선택적 매개변수에 인수를 넣지않아도 되고,  인수로 undefined를 할당해도 오류가 나지 않는다.

 

선택적 매개변수는 필수 매개변수 뒤에 선언되어야 한다. 선택적 매개변수가 앞에 선언되면 오류가 발생한다.

 

기본 매개변수

자바스크립트에서와 마찬가지로 선택적 매개변수에 기본값을 할당할 수 있다. 선택적 매개변수에 인수가 전달되지 않으면 기본값을 할당받는다.

기본값이 있다는 것은 선택적 매개변수라는 것과 동일하기 때문에 ?를 붙이지 않아도 선택적 매개변수로 판단한다.

 

나머지 매개변수

자바스크립트의 나머지 매개변수(rest parameter)를 타입스크립트에서도 사용할 수 있다.

나머지 매개변수는 배열이기 때문에 타입 애너테이션에 []를 붙여줘야 한다.

배열 타입은 이후 챕터에서 다룰 예정이라고 한다.

 

 

2. 반환 타입

함수의 반환타입을 지정하지 않아도 기본적으로 타입스크립트는 반환 가능한 모든 타입을 추론한다.

 

명시적 반환 타입

타입 애너테이션을 사용하여 반환값을 명시적으로 작성 할 수 있다.

매개변수를 선언하는 괄호 뒤에 타입 애너테이션을 작성하면 된다. 

반환 타입과 다른 타입의 값을 반환하면 오류가 발생한다.

 

 

3. 함수 타입

함수도 값으로 전달할 수 있기 때문에(일급 객체) 함수를 값으로 가지는 매개변수 또는 변수의 타입을 선언하는 방법이 필요하다. 함수의 타입 구문은 화살표함수와 유사하다.

함수 타입은 콜백 매개변수를 설명하는데 자주 사용된다.

 

위와 같은 함수가 주어져 있을 때

형식에 맞지 않는 콜백함수를 등록하면 에러가 발생한다.

 

함수 타입 괄호

유니언 타입 애너테이션을 사용할 때 함수 타입을 포함시키고 싶으면 함수 타입을 괄호로 감싸준다.

위의 코드는 string이나 undefined를 반환하는 함수 타입이다. 반면에

이 변수에는 undefined가 담기거나 string을 반환하는 함수가 담긴다.

 

매개변수 타입 추론

타입스크립트는 선언된 타입의 위치에 제공된 매개변수의 타입을 유추할 수 있다.

 

함수 타입 별칭

함수 타입 역시 타입 별칭 사용이 가능하다.

 

4. 그 외 반환 타입

void 반환 타입

함수에 반환값이 없는 경우 void 키워드를 사용한다.

 

반환값이 void인 함수에서 어떤 값을 반환하면 오류가 발생한다.

 

자바스크립트에서 함수는 반환값이 없을 때 undefined를 반환하는데 void의 의미는 그것과 약간 다르다.

반환값이 void인 함수를 undefined 타입이 가능한 변수에 할당하려고 하면 오류가 발생한다.

* 'void를 반환하도록 선언된 타입 위치에 전달된 함수가 반환된 모든 값을 무시하도록 설정할 때 유용하다.'

   라는 문구가 있는데 아직은 이해를 못하겠다.

 

never 반환 타입

never 반환 함수는 (의도적으로) 항상 오류를 발생시키거나 무한 루프를 실행하는 함수이다.

 

 

5. 함수 오버로드

일부 함수는 완전히 다른 매개변수를 받아야 하는 경우가 있다. 이럴 때는 오버로드 시그니처(overload signature)라고 불리는 타입스크립트 구문을 사용한다.

하나의 최종 구현 시그니처와 그 함수의 본문 앞에 서로 다른 버전의 함수 이름, 매개변수, 반환 타입을 여러 번 선언한다.

이름이 같은 하나의 함수이지만 들어오는 인자에 따라 동작과 반환값이 달라진다.

 

호출 시그니처 호환성

오버로드된 함수의 구현에서 사용되는 구현 시그니처는 모든 오버로드 시그니처와 호환되어야 한다.

호환이 되지 않는 시그니처는 에러가 발생한다.

 

 

Reference

- 조시 골드버그, 러닝 타입스크립트, 고승원 옮김, 2023

'개인공부 > Typescript 공부' 카테고리의 다른 글

Typescript 인터페이스  (0) 2023.03.05
Typescript 배열  (0) 2023.03.03
Typescript 객체  (0) 2023.02.28
유니언과 리터럴  (0) 2023.02.26
Typescript의 타입 - 러닝 타입스크립트  (0) 2023.02.25

댓글