타입스크립트 Narrowing & Assertion

적자생존·2022년 8월 29일
0

typeScript

목록 보기
8/8

1. Narrowing이란?

타입이 아직 하나로 확정되지 않았을 경우 사용하는 방법

2. Narrowing 사용예제


function func(x:number | string){
  return x+1
}

func(123)

위의 경우 다음과 같은 에러가 발생한다.

이 에러를 없애기 위해서 Narrowing을 써보면??

function func(x: number | string) {
  if (typeof x === "string") {
    return x + "1";
  } else {
    return x + 1;
  }
}

func(123);

typeof라는 연산자를 사용하여 타입을 지정해주면 된다.

주의사항

가. 따옴표나 쌍따옴표를 사용하여야 한다.

typeof x === string (X)
typeof x === "string" (O)

나. if문을 썼으면 끝까지 써야 안전하다.

else, else if 안쓰면 에러가 날 수도 있다.

Narrowing으로 판별해주는 문법들 있다.

typeof 변수
속성명 in 오브젝트자료
인스턴스 instanceof 부모

3. Assertion 문법

타입을 덮어쓰는 방법이다.

4. Assertion 사용예제


function func(x: number|string){
	let array : number[] = [];
  array[0] = x as number
}

func(123)

as라는 키워드로 타입을 덮어 쓸 수 있다.

이렇게 하면 if문 안쓰고 개꿀이겠네??

하지만 이러면 혼난다고 한다?

5. Assertion 용도

가. Narrowing할 때

애초에 Assertion의 경우는 여러 개의 타입을 하나로 확정할 때 쓰는 것이다.

let 이름 : string = "kim"
이름 as number

이렇게 사용하면 안된다.

Assertion의 목적은 타입을 확정하는 것이지 타입을 변경하는 것이 아니다.

나. 무슨 타입이 들어올지 100% 확실할 때 사용한다.

function func(x: number | string) {
  let array: number[] = [];
  array[0] = x as number;
}

func("123");

위의 예제와 같이 문자 123이 들어와도 에러를 캐치해주지 않는다.

따라서 x에 들어오는 값의 타입이 무엇인지 확실 할 때 사용해 주도록 한다.

그래서 굳이 Assertion을 사용하지 않는다.

디버깅용으로 사용하거나 긴급할 때 사용하는 문법이다.

profile
적는 자만이 생존한다.

0개의 댓글