함수를 설명하는 가장 좋은 방법은 어떤 매개변수를 받고, 어떤 결과값을 반환하는지에 대한 정보이다.
타입스크립트에서는 ‘어떤타입의’ 매개변수를 받고, ‘어떤타입을’반환하는지의 정보가 중요하다.
func의 매개변수 a,b는 number타입이며, 반환값또한 number타입이다.
function func(a:number,b:number):number {
return a+ b;
}
만약 결과값의 타입을 지정해 주지 않아도 반환값을 기준으로 자동 추론해준다.
const add = (a:number, b:number): number => a+b;
const add2 = (a:number, b:number) => a+b; // 이때 add2의 반환값타입은 number
// 기본값을 'heesu'로 지정해줬는데 타입을 넘버로 지정할 수 없다.
function intro(**name:number = 'heesu'**, tall:number) {}
function test (name="heesu") {}
**test(1) // name매개변수의 타입은 string으로 추론되지만 전달한 인수는 number타입**
function test2 (name:string,age:number){}
**test2('hi') // 인수의 개수가 부족**
생략하고 싶은 경우에는 매개변수에 ?를 붙혀서 선택적 프로퍼티로 만들어줌
function intro(name='heesu',age?:number){
console.log(`name:${name}`);
}
하지만 선택적 프로퍼티에 어떤 연산을 하려고하면 에러가 뜬다. age는 undefined일수도 있는데, 숫자에만 가능한 연산이 불가능하기 때문이다.
function intro(name='heesu',age?:number){
**console.log(age+10); // 에러 age가 undefined일 경우 +10 연산 불가
// 타입 좁히기로 에러 해결가능하다.**
if(typeof ==='number') {
console.log(age+10)
}
}