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만 쓸 경우
정의한 파라미터 타입이 일치하지 않거나 개수가 맞지 않을 경우 에러가 발생하기 때문이다.
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를 절대적으로 만들어야 한다.