타입스크립트에서는 함수를 어떻게 다루는지 알아보자
이 글에서 알아볼 것
- 함수에 타입 선언하기 (파라미터)
- 함수에 타입 선언하기 (return)
- void 타입, never 타입
1. 함수에 타입 선언하기 (파라미터)
- 함수의 파라미터에 타입 애너테이션을 해주지 않는다면, any타입으로 기본설정된다
- 즉, 파라미터에 원하지 않은 타입의 값을 받을수도있다
- 이를 타입 애너테이션을 활용해 막아야한다
const add2 = (num1: number, num2: number) => {
// num1.toUpperCase(); 타입이 선언되었기때문에 에러가 발생한다
return num1 + num2;
};
add(3, 5);
// add(3, "asdf");
// add("qwer", true);
// 타입이 선언되었기때문에 에러가 발생한다
- 자바스크립트에서 함수 파라미터에 기본값을 할당할수있었다.
- 그렇다면, 함수 파라미터에 타입 애너테이션이 존재할때는 어떻게 기본값을 할당할까?
const dummyFn = (str: string = "messi") => {
return str;
};
dummyFn();
- 타입 애너테이션 뒤에서 할당해줘야한다
2. 함수에 타입 선언하기 (return)
- 함수 파라미터에서만 타입 애너테이션을 활용할수있는것이 아닌, return에, 즉 함수 자체에도 타입 애너테이션을 활용할수있다
const add2 = (num1: number, num2: number): number => {
return num1 + num2;
};
- 근데 이미 파라미터에서 타입을 선언해줬고, 그것들만 사용하는데, 함수자체에 타입 애너테이션이 필요할때가 있을까..? ,,, 있다
const add3 = (num1: number, num2: number) => {
num1 + num2;
};
console.log(add3(1, 2));
- 코드에서 알수있듯이 return을 빼먹었다고 가정하자, 이러면 우리는 타입스크립트가 오류를 알려줄것이라 기대할것이다,
- 하지만 타입스크립트는 해당 코드에 문제가없다 판단한다,,왜그럴까?
- 이런 경우에는 타입 애너테이션이 자동으로 void로 잡히기때문에 리턴을 안해도 문제가 없다고 판단하기때문이다
- 따라서 확실히 하기 위해서는 함수 자체에도 타입을 선언해주자
3. void 타입, never 타입
- void 타입
- 함수에서 아무것도 반환하지 않으면, 그 함수는 void 타입이다
- 만약 return이 없는 함수라면, 타입 애너테이션을 활용해 void함수라는 것을 명시해주자(권장)
- never 타입
- 절대 반환되지 않아야할 함수에 타입 애너테이션으로 활용되는 타입이다
- void와는 다른것이, void는 눈에는 아무것도 반환하지 않는것처럼 보이지만, 실제로는 undefind를 반환하고, never는 진짜 아무것도 반환하지 않는다
- 즉, void는 무엇을 반환하던 상관없는 함수에 사용하고, never는 반환이 없어야하는 함수에 사용한다
- 절대 반환되지 않아야할 함수에 타입 애너테이션으로 활용되는 타입이다
'OLD > Typescript' 카테고리의 다른 글
[Typescript] Typescript Type (타입 애너테이션, 타입 추론...) (0) | 2023.03.08 |
---|---|
[Typescript] Typescript 시작하기 (0) | 2023.02.26 |