함수 정의하기

홍범선·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개의 댓글