[TypeScript] Type Assertion

Joah·2022년 10월 5일
0

TypeScript

목록 보기
16/16

🏕 Assertion

결론적으로 Type Assertion은 좋은 방법의 타입 지정은 아니다.
강제적으로 타입을 지정하는 것이기 때문이다.

함수를 작성할 때 return 해주는 데이터 타입이 무조건!!! 100퍼센트 무슨 일이 일어나도 string이다 라고 확신할 때! 만 사용하도록

  function jsStrFunc(): any {
    return "hello";
  }

  const result = jsStrFunc();
//원래라면 result는 any 타입이라 string의 length 프로퍼티에 접근할 수 없다
  console.log(result.length);
// result as string으로 작성하면 무조건 string이라고 강제로 타입 지정
  console.log((result as string).length);
//이렇게 작성해도 같은 의미
  console.log((<string>result).length);

원래라면 length를 사용할 수 없는데 뭔가 업그레이드 되었는지 콘솔에 5가 잘 띄어진다. 근데 방심하면 안되는게 분명 any인데 string 프로퍼티에 접근 가능했단 말이지? 이것도 충분히 오류를 일으킬 수 있지 않을까?


만약 return에 숫자를 작성해보면?

  function jsStrFunc(): any {
    return 2;
  }

  const result = jsStrFunc();

  console.log(result.length);
  console.log((result as string).length);
  console.log((<string>result).length);

//undefined
//undefined
//undefined

코드를 작성하는 시점에서 에러는 나지 않지만 런타임에서 undefined를 내뱉는다.

이렇게 간단한 코드라 어디가 잘못되었는지 쉽게 찾을 수 있지만 복잡한 코드라고 가정했을 때, Assertion을 사용해도 에러가 발생하지 않는다면...?
처음부터 디버깅 해야하는 문제가 생긴다.

따라서 진짜진짜진짜 확신할 때만 사용한다.

느낌표를 이용한 Type Assertion

  function findNumber(): number[] | undefined {
    return undefined
  }

  const results = findNumber()
  results!.push(2)

//또는

  const results = findNumber()!
  results.push(2)

절대 undefined이 아니라 무조건 숫자이다. 라고 장담할 때 느낌표를 붙인다.

profile
Front-end Developer

0개의 댓글