Typescript 4.9는 무엇이 달라졌을까요

글을 쓰는 시점으로부터 23 ~ 24시간 전 (이제 막 하루가 되었네요!) Typescript 4.9가 정식으로 릴리즈되었습니다. TS 릴리즈 공지를 링크에 달아두었으니 어떤 점이 달라졌는지 궁금하시다면 참고해보세요. 그냥 여기서 끝내면 글이 아쉬우니 몇 가지만 간단히 살펴봅시다! 1. satisfies 연산자 추가 기존엔 as를 이용한 타입 단언을 통해 타입 다운캐스팅을 했는데요. 이번에 추가된 satisfies 연산자는 안전한 업캐스팅을 지원합니다. 원래는 타입이 미리 정해져 있어야만 안전한 업캐스팅이 가능했는데 이 연산자를 이용한다면 객체 안에 하나의 key, value 쌍에 대해서도 편리하게 안전한 업캐스팅이 가능합니다. 개인적으로 아주 유용할 듯한 연산자입니다. (근데.. TS가 좀 복잡해지는 감도 있는거 같습니다..ㅎㅎ) 2. in 연산자를 통해 이제 Property의 범위를 좁힐 수 있습니다. (좀 더 똑똑해졌습니다.) if ("name" in packageJSON && typeof packageJSON.name === "string") return packageJSON.name; 위 코드를 살펴봅시다. TS 4.9 이전에서는 에러를 반환합니다. 왜냐하면 pacakgeJSON에 name이 있는지 in 연산자를 거쳐도 보장이 되지 않기 때문입니다. 하지만 TS 4.9에는 in 연산자가 좀 더 똑똑해져서 해당 코드가 문제없이 동작합니다. in 연산자를 통해 나열되지 않은 속성들의 범위를 좁힐 수 있습니다. 객체나 함수가 받는 파라미터 타입이 여러 개이면 충분히 유용할 기능일 것 같습니다. 3. NaN에 대한 직접 비교는 이제 에러를 발생시킵니다. TS 4.9 이전에서 NaN !== NaN 해당 코드의 값은 어땠을까요? 정답은 true 입니다. 따라서 해당 숫자를 validate 하기 위해 someValue !== NaN 에서 someValue에 NaN이 들어가면 코드의 의도대로 작동하지 않는 것이죠. 이는 TS가 JS의 런타임을 모델링하고 있고 해당 문제는 JS의 동작에서 발생하는 문제인데요. 이를 해결하기 위해 TS 4.9에선 NaN의 직접 비교는 에러를 발생시킵니다. 대신 Number.isNaN을 활용하라고 하네요! 이외에도 class에 auto-accessor 추가라던지 성능개선 등 여러 변경점을 TS 4.9에서 전하고 있는데요! 앞으로도 TS가 많이 발전했으면 좋겠습니다. (물론 너무 복잡해지는 건 사절이요..ㅎㅎ)

Announcing TypeScript 4.9

TypeScript

Announcing TypeScript 4.9

다음 내용이 궁금하다면?

또는

이미 회원이신가요?

2022년 11월 18일 오후 5:44

 • 

저장 27조회 4,031

댓글 0