이름 기반 타입 흉내내기 예를 들어 몇 가지의 ID 타입이 있는데, 그 각각은 시스템에서 사용하는 서로 다른 종류의 객체를 고유한 방식으로 식별해 준다고 해봅시다. type CompanyID = string type OrderID = string type MemberID = string type ID = CompanyID | OrderID | MemberID MemberID 타입의 값이 "i4want4go4home" 같은 단순 해시값이라고 해봅시다. 따라서 비록 MemberID라는 별칭으로 사용했지만 실질적으론 일반 string입니다. MemberID를 인수로 받는 함수는 다음처럼 정의할 수 있습니다. type CompanyID = string type OrderID = string type Member..
확실한 할당 어서션 TypeScript는 확실한 할당 검사용으로 nonnull 어서션을 적용하는 특별한 상황에 사용할 특수 문법을 제공합니다. let userId: string userId.toUpperCase(); // 'userId' 변수가 할당되기 전에 사용되었습니다.ts(2454) 이 에러 검출은 TypeScript가 제공하는 멋진 서비스입니다. userId 변수를 선언했지만 값을 할당하는 걸 깜빡 잊은 채 대문자 변환 작업을 수행했습니다. TypeScript가 검출해주지 않았다면 런타임 에러가 발생했을 것입니다. 하지만 코드가 다음과 같다면 어떨까요? let userId: string fetchUser() userId.toUpperCase(); // 'userId' 변수가 할당되기 전에 사용되었..
Nonnull 어서션 null이 될 수 있는 특별한 상황(T | null 또는 T | null | undefined 타입)을 대비해 TypeScript는 어떤 값의 타입이 null이나 undefined가 아니라 T임을 단언하는 특수 문법을 제공합니다. 몇 가지 상황에서 이 기능을 활용할 수 있습니다. 예를 들어 웹 앱에서 다이얼로그를 보여주거나 숨기는 프레임워크를 개발했다고 가정합니다. 각 다이얼로그는 고유의 ID를 가지며 이 ID로 다이얼로그의 DOM 노드 참조를 얻을 수 있습니다. DOM 노드에서 다이얼로그가 사라지면 ID를 삭제해서 DOM 안에 다이얼로그가 더 이상 존재하지 않음을 알립니다. type Dialog = { id?: string } function closeDialog(dialog: D..
탈출구 상황에 따라서는 타입을 완벽하게 지정하지 않고도 어떤 작업이 안전하다는 사실을 TypeScript가 믿도록 만들고 싶을 때가 있습니다. 예를 들어 사용하고 있는 서드 파티 모듈의 타입 정의가 잘못되었음을 파악한 후, DefinitelyTyped에 수정 사항을 기여하기 앞서 코드에서 먼저 검증해보려 한다거나, 아폴로(Apollo)로 타입 선언을 다시 만들지 않은 채 API가 반환한 데이터를 사용해야 하는 상황일 수도 있습니다. 다행히 TypeScript는 안전한 작업임을 증명할 시간이 없을 때 활용할 수 있는 탈출구를 제공합니다. 명확하지 않다면, 다음에 나열하는 TypeScript 기능들은 되도록 적게 사용하는 게 좋습니다. 이 기능들에 너무 의존하는 상황이라면 무언가 잘못된 것일 수 있습니다. ..