narrowing & assertion

김수영·2022년 1월 20일
0

Typescript

목록 보기
5/8
post-thumbnail

Type narrowing

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

if문과 typeof 키워드로 현재 파라미터의 타입을 검사해서

"이게 'number' 타입일 경우 이렇게 해주세요~"

"이게 'string' 타입일 경우 이렇게 해주세요~"

이렇게 코드를 짜야 정상적으로 사용이 가능합니다.

타입스크립트는 타입 애매한걸 싫어해서 귀찮아도 하셔야함

타입이 확실하지 않을 때 생기는 부작용을 막기위한 장치라고 보시면 된다.

가끔 이걸 "defensive 하게 코딩한다"라고 하기도 한다.

근데 또 함수 안에서 if문 쓸 때는 마지막에 else {} 이거 없으면 에러가 난
다.

return 하지않는 조건문이 있다면 나중에 버그가 생길 수 있어서 에러를 내주는 것인데

"noImplicitReturns": false,

이게 성가시다면 tsconfig.js 파일에서 이걸 추가하면 됩니다. 근데 굳이 수정하는 것 보다는 엄격하게 쓰자.

Type Assertion

변수명 as string

이런 식으로 as라는 키워드 쓰면 된다.

function 내함수(x :number | string){ 
    return (x as number) + 1 
}
console.log( 내함수(123) )

as 키워드 사용시 특징이 있는데

  1. as 키워드는 union type 같은 복잡한 타입을 하나의 정확한 타입으로 줄이는 역할을 수행한다 (number 타입을 as string 이렇게 바꾸려고 하면 에러난다)

  2. 실은 그냥 타입실드 임시 해제용. 실제 코드 실행결과는 as 있을 때나 없을 때나 거의 동일하다

아무튼 그러면 이제 변수를 숫자로 가정해서 가공할 수 있다.

profile
기술과 인문학의 교차점

0개의 댓글