alswlfl 2023. 1. 3. 14:54

함수 형태

function add(num1:number, num2:number){
  return num1+num2;
}
function isAdult(age:number):boolean{
  return age>10;
}
  • 함수의 매개변수도 optional로 지정 가능(단, 타입 명확하게 명시해주어야 함)
function hello(name?:string){
  return `Hello, ${name || "world"}`;
}
const result=hello();
const result2=hello("Sam");

//주의점: optional인 매개변수는 뒤에 배치해야 함
function hello2(name:string, age?:number):string{
  if(age!==undefined){
    return `Hello, ${name}. You are ${age}.`;
  }else{
    return `Hello, ${name}`;
  }
}
//만약 optional을 앞에 배치하고 싶다면
function hello3(age:number | undefined, name:string):string{
  if(age!==undefined){
    return `Hello, ${name}. You are ${age}.`;
  }else{
    return `Hello, ${name}`
  }
}
  • rest파라미터(나머지 매개변수: 개수가 매번 바뀔 수 있음) 
    • 점 세 개를 사용하면, 전달받은 매개변수를 배열로 나타낼 수 있음(즉, 타입은 배열 형태로)
function add2(...nums:number[]){
  return nums.reduce((result,num)=>result+num,0);
}
add2(1,2,3);
add2(1,2,3,4,5,6,7,8,9,10);
  • this
interface User{
  name: string;
}
const Sam:User={name:'Sam'}

function showName(this:User){
  console.log(this.name)
}

const a=showName.bind(Sam);
a();
  • 오버로드: 전달받은 매개변수의 개수나 타입에 따라 다른 동작을 할 수 있게 해주는 것
    • 형태를 위에 똑같이 적어주면 됨
interface User2{
  name2:string;
  age2:number;
}

function join(name2: string, age2: string):string;
function join(name2: string, age2: number):User2;
function join(name2:string, age2:number | string):User2 | string{
  if(typeof age2==="number"){
    return{
      name2,
      age2,
    };
  }else{
    return "나이는 숫자로 입력해주세요.";
  }
}