ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • narrowing과 assertion이란.
    typescript 2022. 1. 17. 20:10

    1)

    파라미터로 union 타입이 지정됐을 경우,

     

    이렇게 typeof 함수로 각 타입이 들어올 경우 별로

     

    로직을 만들어주는것을 narrowing이라고한다.

     

    그 외, 

    이런 방법들이있는데,

     

    특히 instanceof 함수는 뒤 포스트에 기술하겠지만,

     

    html 요소를 셀렉터로 찾아 dom을 조작하는 로직을 작성할 때 유용하다.

     

     

     

    2)

    assertion은 

    역시 union 타입 파라미터를 가진 함수에서

     

    받은 인자의 타입을 하나로 확정지어서 쓸 수 있게해준다.

     

    핵심은 as 타입으로 타입을 확정해주는 assertion 방식은

     

    그냥 타입을 하나로 확정해서 타입 쉴드의 작동을 막는것뿐이지, 실제로 타입을 as 뒤 타입으로 바꾸지않는다.

     

     

    즉, 그냥 타입이 number라고 치고 넘어가게한 다음

     

    뒤의 로직은 실제 타입대로 연산된다.

     

     

    따라서, 

     

    이런 함수를 js로 변형해 콘솔창에 넣어보면

     

    실제 결과는 이렇게 나온다.

     

     

    정리하자면

     

    narrowing은 union 파라미터의 실제 타입을 판별해 타입별로 수행 로직을 분류해주는것.

     

    assertion은 union 파라미터의 타입을 임의로 하나로 확정해 사용하게해주지만, 실제 타입은 변하지않는다.

     

     

    그래서 assertion은 타입스크립트의 본 목적에 역행하는 기능이기때문에,

     

    일시적으로 디버깅이나 이슈의 임시적 빠른 해결을 위한 상황을 제외하고는 많이 쓰이지않는다.

     

    또한 assertion을 꼭 써야한다면,

     

    들어오는 파라미터의 타입이 꼭 as 타입으로 정해준 타입과 동일하다는 전제 아래에 쓰여야한다.

     

    그렇지않고 임의적으로 컴퓨터를 속여 원래 타입을 다른 타입으로 보이게하는것은

     

    불확실성을 높여 올바른 코드 작성에 도움이 되지않기때문이다.

    'typescript' 카테고리의 다른 글

    함수와 메소드에 type alias 붙이기.  (0) 2022.01.17
    literal types로 타입 지정해보자.  (0) 2022.01.17
    type alias란.  (0) 2022.01.17
    typescript의 함수에 대하여.  (0) 2022.01.17
    any, unknown 타입과 타스의 엄격함.  (0) 2022.01.17
Designed by Tistory.