우리가 버그가 없는 코드를 작성하기 위해서 사용하는 타입스크립트도 알고 보면 은근히 버그 투성이라는 것을 혹시 알고 계신가요?
예를 들어, 아래 타입스크립트 코드에서 배열에 `4`가 없으니 많은 분들이 `numbers.includes(4)`는 `false`를 반환할 거라고 생각하실텐데요.
```ts
const numbers = [1, 2, 3] as const;
numbers.includes(4);
```
사실 `numbers.includes(4)`에서는 타입 에러가 발생해요. 좀 당황스럽죠? 😅
다른 예로, 아래 코드에서 `validTags`의 타입은 뭐가 될까요? `undefined`와 `null`이 제거되었으니 `string[]`이 될까요?
```ts
const tags = ["work", "life", undefined, "travel", null];
const validTags = tags.filter(Boolean);
```
이 경우 `validTags`의 타입은 여러분의 예상과 다르게 `(string | null | undefined)[]`가 됩니다. 논리적으로 납득이 좀 힘들죠? 🙄
이번 포스팅에서는 많은 개발자들이 타입스크립트로 코딩하다가 겪게 되는 황당한 경우에 대해서 알아보고, 이러한 타입스크립트의 버그를 깔끔하게 고쳐주는 `ts-reset`이라는 라이브러리를 소개해드리려고 합니다.