TypeScript

타입 확정하기 Narrowing & Assertion

단점이없어지고싶은개발자 2022. 5. 11. 22:11
반응형

1. Narrowing 타입이 아직 하나로 확정되지 않았을 경우

//타입이 어떤 타입인지에 대해 조건식으로 코드를 짜야한다.
//타입이 아직 불확실하다면 Narrowing해줘야 한다.
//주의점은 if문을 사용했으면 끝까지 써야 안전하다. else, else if문까지.

//typeof 변수
//속성명 in 오브젝트자료
//인스턴스 instanceof 부모
function func(x: string | number) {
  if (typeof x === 'number') {
    return x + 1;
  } else {
    return x + '1';
  }
}

func(123);

function arrFunc(x: number | string): void {
  let arr: number[] = [];

  if (typeof x === 'number') {
    arr[0] = x;
  }
}

arrFunc(123);

 

2. assertion 문법 (타입덮어쓰기)

function myFun(x: string | number) {
  let array: number[] = [];

  //왼쪽에 있는 변수를 어떤 타입으로 덮여씌우겠다. x 가 number로 덮어씌어진다.
  //하지만 이러면 좋지 않다. 아래 이유 외에는 결코 쓰지 않는것이 좋다.
  //1. Narrowing 할 때 쓴다. union에서 타입이 애매할 때 사용한다.
  //2. 무슨 타입이 들어올지 100% 확실할 때 쓴다.
  array[0] = x as number;
}

myFun(30);
반응형