함수 정의하기

홍범선·2023년 10월 21일
0

타입스크립트

목록 보기
10/34

타입스크립트로 함수 정의하기

function printName(name){
	console.log(name);
}

이렇게 사용하지 말고

function printName(name: string){
  console.log(name);
}

function returnTwoCouples(person1: string, person2: string){
  return `${person1}${person2}는 사귀고 있습니다.`
  
}

TS를 사용하자
왜냐하면

console.log(returnTwoCouples('아이유', '코드팩토리')); //파라미터가 옵셔널이 아니기 때문에 반드시 써야 한다. 안 쓸 경우 에러가 발생한다.
// returnTwoCouples('아이유', 1) //타입이 잘못된 것을 넣을 때
// returnTwoCouples('아이유') //2개 매개변수지만 하나만 쓸 경우
// returnTwoCouples('아이유', '코드팩토리', '레드벨벳') //2개 매개변수지만 3만 쓸 경우

정의한 파라미터 타입이 일치하지 않거나 개수가 맞지 않을 경우 에러가 발생하기 때문이다.

optional 파라미터

function multiplyOrReturn(x: number, y?: number){ //?는 y또는 undefined가 될 수 있다.라고 정의를 한다.
  if(y){
    return x*y;
  }else{
    return x;
  }
}
console.log(multiplyOrReturn(10,20));
console.log(multiplyOrReturn(10));

function multiplyOrReturn2(x: number, y: number = 20){ 
  //y에 아무것도 안들어오면 20란 값이 배정이된다.
  return x*y;
}

console.log(multiplyOrReturn2(10));
console.log(multiplyOrReturn2(10,30));

파라미터에 옵셔널(?)을 사용할 수 있다.
옵셔널은 y 또는 undefined라는 의미이다.
그래서 multiplyOrReturn(10)이 에러가 발생하지 않는다.

하지만 옵셔널말고 직접 값을 파리미터에서 정의할 수 있다.
y에 아무것도 안들어오면 20란 값이 배정이된다.

나머지 매개변수

function getInfiniteParameters(...args: string[]){
  return args.map((x) => `너무좋아 ${x}`);
}

console.log(getInfiniteParameters('아이유', '아이브', '블랙핑크'));
//console.log(getInfiniteParameters(1,2,3)); 
//안된다. 왜냐하면 arg를 string타입으로 받기로 했기 때문이다.

...args를 하게 되면 무한히 파라미터를 입력받을 수 있게 되는데 string타입으로 정의를 했기 때문에 number타입이 들어가면 에러가 발생한다.

리턴타입

function addTwoNumbers(x: number, y:number){
  return x+ y;
}
addTwoNumbers(10,20); // 반환타입도 number이다. 알아서 TS가 유추를 한다.


function randomNumber(){
  return Math.random() > 0.5?
  10 : '랜덤';
}
randomNumber() //반환타입은 number or '랜덤'으로 된다.

function subtractTwoNumbers(x: number, y: number) : number{
  //return '이게 반환이 되나?'; 반환타입을 string으로 바꾸던지 지우던지
  return x- y;
} // 반환하는 타입도 작성하면 수월하게 함수를 작성할 수 있다.

const subtractTwoNumbersArrow = (x : number, y: number) : number => {
  return x- y;
}

타입스크립트는 파라미터의 타입을 정의하면 리턴타입도 유추해서 정의한다.
그래서 리턴타입이 맞지 않는 경우 에러를 발생시킨다.

특수 반환 타입

특수 반환 타입에는 void와 never가 있다.

function doNotReturn() : void{
  console.log('저는 반환을 하지 않습니다.');

  //return 3; //에러가 발생한다. 보이드 타입이기 때문에
  return //가능
}

doNotReturn()

function throwError() : never{
  while(true){

  }
} //반환이 안되는 거기 때문에 never타입이다.

//throwError(); 

function throwError2() : never{
  throw Error();
} // 함수가 끝나지 않는 상황을 절대적으로 만들어내면 된다.

특수 반환 타입 중 void 같은 경우 return문만 쓰거나 return문을 안 쓸 경우 이다.
만약 void타입으로 선언하고 return 3같이 값을 리턴하면 에러가 난다.

never타입은 함수가 정상적으로 끝이 나면 안된다. 그래서 함수가 끝나지 않는 무한루프나 throw error를 절대적으로 만들어야 한다.

profile
알고리즘 정리 블로그입니다.

0개의 댓글