함수에 타입 지정하는 법 & void 타입 (3)

2024. 9. 11. 20:10카테고리 없음

728x90
반응형

함수는 총 두 군데 타입지정이 가능합니다.

1. 함수로 들어오는 자료 (파라미터)

2. 함수에서 나가는 자료 (return)

function car(x :number) :number { 
  return x * 2 
}

1. 함수로 들어오는 파라미터 타입지정은 파라미터 옆에 적으면 됩니다.

2. 함수가 실행된 후 남는 값 (return 우측에 있는 값) 타입지정하고 싶으면 함수명() 우측에 적으면 됩니다.

 

void 함수는 return할 자료가 없는 함수의 타입으로 사용가능합니다.

function car(x :number) :void { 
  return x * 2 //여기서 에러남 
}

 

함수도 마찬가지로 union type을 사용할 수 있습니다.

 

function car(x? : number) : void{

}
car()

파라미터가 옵션인 경우 변수? : 타입

변수? :number 는 변수:number | undefined 와 같습니다.

 

function car(x? : number | undefined) : void{

}
car()

 

 

function car (x: number | string): void{
console.log(x+3)
}
car(2)

이 코드가 에러가 나는 이유는  +는 왼쪽 타입이 숫자거나 문자여야 하는데 지금 x는  number | string 이기 때문에 오류가 납니다.

 

이렇게 Type이 하나로 확정되지 않았을 경우 Type Narrowing을 사용해야합니다.

function car(x :number | string){
  if (typeof x === 'number') {
    return x + 1
  } 
  else if (typeof x === 'string') {
    return x + 1
  }
  else {
    return 0
  }
}

 

narrowing을 사용하기 귀찮으면 assertion 문법을 사용하면 됩니다.  (타입을 덮어쓴다.)

 

function car(x : number|string) {
let array : number[] =[];
array[0] = x; // 오류나는 이유는 x 타입이 애매하기 때문입니다. 애매하면 narrowing을 사용해한다
}

car(123);

 

function car(x : number|string) {
let array : number[] =[];
array[0] = x as number; //왼쪽에있는 변수를 number로 덮어 사용해주세요


car(123);

 

1. union type 같은 복잡한 타입을 하나의 정확한 타입으로 줄이는 역할을 수행합니다. (union type을 확정시키때)

2. 왜 타입에러가 나는지 정말 모르겠는 상황에 임시로 에러해결용으로 사용하거나

3. 내가 어떤 타입이 들어올지 정말 확실하게 알고 있는데 컴파일러 에러가 방해할 때