이번 시간에는 타입스트립트에서 함수에 타입을 지정하는 방법과 void 타입을 알아보겠습니다.
이전 시간에 타입스크립트 문법 10분 정리에서 함수에 타입을 지정하는 방법은 다룬 바 있습니다. 함수에서는 void 타입도 활용이 가능합니다. return 할 것이 없을 경우에 사용합니다. 두번째 코드에서처럼, 화살표 함수에서 중괄호를 생략하면 return 문을 작성한 것이나 마찬가지이기 때문에 오류가 발생합니다.
const add = (x: number): void => {
1 + 1;
};
const add = (x: number): void => 1 + 1; // 에러 발생
파라미터에 타입이 지정되어 있는 경우, 파라미터는 필수입니다. 파라미터가 옴션일 경우에는 파라미터 변수에 물음표를 붙여주면 됩니다.
const add = (x: number): void => {
1 + 1;
};
add(); // 에러 발생
const add = (x?: number): void => {
1 + 1;
};
add(); // 정상 작동
물음표는 들어올 수도 있다는 뜻을 가지고 있지만, 사실 undefined와 같습니다. 하지만 아래 코드에선 ?를 or 연산자와 undefined 로 대체하였는데 에러가 발생합니다. 타입 체크 관점에서는 오류가 있어도 실행은 될 수 있지만, or 연산자로 undefined 라고 타입을 명시한 경우에는 파라미터로 undefined 를 명시해주어야만 합니다.
const add = (x: number | undefined): void => {
1 + 1;
};
add(); // 에러 발생
const add = (x: number | undefined): void => {
1 + 1;
};
add(undefined); // 정상 작동
연습으로, 이름을 파라미터로 입력하면 콘솔창에 "안녕하세요 홍길동" 을 출력해주고, 아무것도 파라미터로 입력하지 않고 함수를 사용하면 "이름이 없습니다." 를 출력하는 함수를 만들어봅시다.
const nickname = (x?: string): void => {
if (x) {
console.log("안녕하세요 " + x);
} else {
console.log("이름이 없습니다.");
}
};
nickname("홍길동"); // 안녕하세요 홍길동
nickname(); // 이름이 없습니다.
const line = (x: string | number): number => {
return x.toString().length;
};
마지막으로 결혼 가능 확률을 알려주는 함수를 만들어봅시다.
a. 함수의 파라미터로 월소득(만원단위), 집보유여부(true/false), 매력점수 ('상' or '중' or '하') 를 입력할 수 있어야합니다.
b. 월소득은 만원 당 1점, 집보유시 500점 & 미보유시 0점, 매력점수는 '상'일 때만 100점으로 계산합니다.
c. 총 점수가 600점 이상일 경우 "결혼가능"을 return 해줘야합니다. 그 외엔 아무것도 return하지 않습니다.
(예시)
결혼가능하냐(700, false, '중') 이렇게 사용할 경우 "결혼가능"을 return 해줍니다.
결혼가능하냐(100, false, '상') 이렇게 사용할 경우 아무것도 return되지 않습니다.
const marriage = (
salary: number,
house: boolean,
attract: string
): string | void => {
let num: number = 0;
num += salary;
if (house) num += 500;
if (attract === "상") num += 100;
if (num >= 600) return "결혼가능";
};
console.log(marriage(700, false, "중")); // 결혼가능
console.log(marriage(100, false, "상")); // undefined
지금까지 함수에 타입을 지정하는 법과 void 타입에 대해 알아보았습니다. 다음 시간에는, Narrowing 과 Assertion 에 대해 알아보겠습니다.