객체 리터럴 타입과 원시 타입 간 인터섹션 타입이 never가 아닌 이유
·
Frontend/JS, TS
책 "이펙티브 타입스크립트"의 아이템 37 "공식 명칭에는 상표를 붙이기" 부분을 읽던 중, 의문이 생겼다. 왜 객체와 원시 타입을 인터섹션하는데 never가 아닌 거지? 브랜디드 타입(Branded Type)을 공부하면서 생긴 의문을 정리하고자 이 글을 쓴다. 브랜디드 타입을 모르고 읽어도 무방하지만, 안다고 가정하고 글을 썼기 때문에 더 깊게 이해하고 싶다면 이 글을 추천한다. 객체 타입과 원시 타입의 인터섹션 살펴보기type A = number & object; // nevertype B = number & {}; // number & {}type C = number & { _brand: "C" }; // number & { _brand: 'C' } object의 타입은 정확히 object이다. 원..
브랜딩 기법 (Branded Type)
·
Frontend/JS, TS
구조적 타입 시스템의 호환성으로 인한 문제타입스크립트는 기본적으로 구조적 타입(Structural Type) 시스템으로 타입의 구조가 동일하면 타입 간 호환이 가능하다.덕분에 유연한 타입 사용이 가능하지만, 동시에 타입이 다름에도 불구하고 같은 구조를 가지고 있어 호환이 되는 불편이 있을 수 있다. type UserID = number;type PostID = number;async function getPost(userID: UserID, postID: PostID) { const response = await fetch(`/${userID}/${postID}`); const data = await response.json(); return data;}const userID: UserID = 1;..