타입스크립트 제대로 공부하며 배운 것을 정리
string
타입이 더 큰 집합을 가지기 때문에 다른 리터럴 타입들이 적용되지 않는다. 이렇게 되면 자동완성에도 리터럴 타입이 나오지 않는다.
이를 해결하기 위해 아래처럼 string & {}
를 추가해준다. string 타입의 객체임을 명시하면서 타입스크립트 컴파일러의 유니언 타입에서 타입 축소를 방지한다고 한다(정확한 원리는 모르겠음)
그럼 아래처럼 자동완성이 잘 나오게 된다.
위 상황처럼 타입 narrowing을 통해 Map
의 에러에 접근하려고 한다. 하지만 error 객체를 찾지 못하는 타입 에러를 뱉는다.
이유는 타입스크립트는 Map.has()
와 Map.get()
의 관계성을 이해하지 못하기 때문이다.
이를 해결하기 위한 좋은 방법은 Map.get()
으로만 타입 좁히기를 사용하는 것
unknown 타입의 타입 좁히기를 해서 id를 return 해야하는 상황이다. value의 타입을 좁혔지만 여전히 data
의 타입이 unknown인 상태다
이를 해결하기 위해서는 id
타입까지 타입 좁히기를 해줘야 한다.
이렇게까진 타입스크립트를 사용한 적이 없어서 반성했다...
searchParams
를 타입 좁히기한 상황이다. 하지만 여전히 searchParams.name
에서 에러가 나오는 상황이다 (실무에서도 이런 경우가 좀 있었던 거 같다)
이러한 문제가 발생한 이유는 타입 좁히기는 타입 좁히기가 다른 스코프를 커버하지 않기 때문이다.
가령, 아래와 같이 타입을 좁힌 후 값이 변경될 가능성이 있기 때문에 다른 스코프의 타입 좁히기는 언제나 보장하지 않는다.
가장 좋은 방법은 해당 값이 mutable 하지 않다는 것을 타입스크립트에게 알려주는 것이다.
참고: total typescript