Book/Effective Typescript

    Item 10. 객체 래퍼 타입 피하기

    타입스크립트는 기본형과 객체 래퍼타입을 별도로 모델링한다. 객체 래퍼타입은 지양하고 기본형 타입을 사용해야한다.

    Item 9. 타입 단언보다는 타입 선언을 사용하기

    // 타입 선언 const ABC : string = 'wrong'; // 타입 단언 const BCD = 'wrong' as string; 타입 선언은 할당되는 값이 해당 인터페이스 혹은 타입에 만족하는 지 검사한다. 하지만 타입단언은 강제로 지정하기 때문에 타입체크가 의미가 없다. 따라서 타입 선언보다는 타입 단언을 사용하는 것을 권장한다. 또한 잉여속성이 있을 때 타입단언문은 체크를 하지 않고, 타입단언은 잉여속성을 체크한다. 하지만 타입단언이 꼭 필요한 경우가 있다. DOM에 접근할 때인데, DOM에 접근할 때 예로 currentTarget의 타입을 지정할 때 그 타입은 엘리먼트에 없는 속성이라는 에러를 들 수 있다. 이때에는 TypeScript보다 사용자가 DOM에 대한 정보를 더 많이 알고 있..

    Item 8. 타입 공간과 값 공간의 심벌 구분하기

    Item 8. 타입 공간과 값 공간의 심벌 구분하기

    타입은 ':' 부호 뒤에 온다. 값은 '='부호 뒤에 온다. 아래에서 interface Circle은 타입. cosnt Circle 은 값. 위 예제를 보면 instanceof 메소드 위에 오는 Circle은 값으로 받는다. instanceof 는 런타임에 작동하는데 그때에는 타입이 날아가기 때문이다. 따라서 아래에 stuff.diameter값에 오류가 난다. 한편 class나 enum은 타입과 값 두가지로 사용될 수 있다.

    Item 7. 타입이 값들의 집합이라고 생각하기

    이번 아이템을 읽으면서 가장 충격적이였던 코드. 타입 PersonSpan은 Person과 Lifespan의 교집합이 아니라 합집합이다. 지금 생각해보면 당연할 수 있는데 처음에 보자마자 당연하게 교집합이라고 생각했다. interface Person { name: string; } interface Lifespan { birth: Date; death?: Date; } type PersonSpan = Person & Lifespan; const ps: PersonSpan = { name: 'Alan Turing', birth: new Date('1912/06/23'), death: new Date('1954/06/07'), }; // OK 왜냐하면 위에서 type연산자는 속성이 아닌 값의 집합에 적용되기 ..