TypeScript | 함수의 타입

샘샘·2023년 5월 26일
0

TypeScript

목록 보기
5/13
post-thumbnail
function square(num: number) {
  return num * num;
}

square(3);

함수도 타입을 정해주지 않으면 any 타입이 된다
👉 애너테이션을 달아주는 것이 좋음!

함수 파라미터

const doSomething = (person: string, age: number, isFunny: boolean) => {};

doSomething("ChickenFace", 76, false);

함수는 원하는 만큼의 파라미터를 가질 수 있고, js와 마찬가지로 호출하는 순서가 중요하다


function greet(person: string = "stranger") {
  return `Hi there, ${person}!`;
}

greet();
greet("Tony");

파라미터인 person에 string 애너테이션을 설정하고, 기본값으로 "stranger"를 할당했다
greet함수를 빈 파라미터로 호출하면, "Hi there, stranger"가 출력되고 "Tony"를 호출하면 "Hi there, Tony"가 출력된다


return 타입 애너테이션

function circle(num: number) {
  num * num;
}

circle(2);

함수 내에 return을 써주지 않으면 void 타입이다


function rando(num: number) {
  if (Math.random() < 0.5) {
    return num.toString(); // 랜덤한 숫자가 0.5보다 작으면 그 숫자를 문자열로 반환하고
  }
  return num; // 그렇지 않으면 number 타입 그대로 반환해라
}

반환값의 애너테이션을 설정하지 않을 경우, 함수 내부에서 파라미터인 num의 타입을 지정해서 반환하게 했기 때문에 rando 함수의 반환값은 stringnumber 둘 다 될 수 있다

반환하지 않는 void와 반환하면 안 되는 never

function printTwice(msg: string): void {
    console.log(msg);
    console.log(msg);
}

파라미터의 타입은 string이지만 함수 내부에 return이 없기 때문에 = 아무것도 반환하지 않기 때문에 void타입이다


function gameLoop(): never {
    while (true) {
        console.log("GAME LOOP RUNNING!");
    }
}

이 while문은 무한히 돌아가기 때문에 아무것도 반환되는 게 없어야 한다


✅ 차이점

void는 undefined 상태로 반환하기 때문에 값이 존재하고, 이 함수가 무엇을 반환하든 상관하지 않는다
never는 이 함수가 절대 반환할 기회를 가지게 하지 않는다

연습문제

문제 1

Write a function called "twoFer" that accepts a person's name
"twoFer" 함수를 사용해서 한 사람의 이름인 문자열을 인수로 허용하고
It should return a string in the format "one for , one for me"
문자열을 반환해라. 애너테이션을 확실히 사용해서!
If no name is provided, it should default to "you"
twoFer() => "One for you, one for me" (기본값 you)
twoFer("Elton") => "One for Elton, one for me"

function twoFer(name: string = "you"): string{
    return `One for ${name}, one for me`
}

console.log(twoFer());
console.log(twoFer("Elton"));

문제 2

Write a isLeapyear() function that accepts a year and returns true/false depending on if the year is a leap year
isLeapYear(2012) => true
isLeapYear(2013) => false
isLeapyear 함수를 사용해서 불리언 값을 반환해라. 윤년인지 아닌지 여부에 대해서
2012년은 윤년이기 때문에 true, 2013년은 윤년이 아니라 false.

To determine whether a year is a leapyear, use this "formula":
A YEAR IS A LEAPYEAR IF

  • year is a multiple of 4 AND not a multiple of 100
    4나 100의 배수가 아닌지 확인하거나
    OR...
  • year is a multiple of 400
    hint - use modulo
    modulo를 사용해서 400으로 나누어 떨어지는지 확인
const isLeapyear = (year: number): boolean => {
    if(year % 4 === 0 && year % 100 !== 0) {
        return true
    } else if(year % 400 === 0) {
        return true
    }
    return false;
}
profile
회계팀 출신 FE개발자 👉콘테크 회사에서 웹개발을 하고 있습니다

0개의 댓글