본문 바로가기
반응형

개발/TypeScript23

Exclude Exclude 타입은 2개의 제너릭 타입을 받는다. 노드모듈을 타고 들어가면 다음과 같이 나온다. /** * Exclude from T those types that are assignable to U */ type Exclude = T extends U ? never : T; 제너릭 타입 T가 가진 타입중 제너릭 타입 U와 겹치는 타입을 제외한 타입을 반환한다. 위 예시에서는 T= string | number, U = number | boolean 이다. T중에서 U와 겹치는 타입인 string을 제외한 타입 number를 반환한다. 2023. 6. 5.
실제 작동하는 Javascript를 무겁게 만드는 enum과 그 대안 : as const를 활용한 객체 Typescript에서 Javascript으로 변환되는 과정 TS를 컴파일하여 JS를 만드는데, 이 컴파일 과정에서 타입스크립트는 타입체크를 하게 된다. 컴파일과정에서 타입체크가 끝나면 타입과 타입연산자는 제거되면서 런타임과 런타임 성능에 영향을 주지 않는다. 그런데 enum의 경우 TS에서 자체 제공하는 기능이고 JS에서는 없는 개념이다. 컴파일과정에서 JS에 없는 enum을 구현하기 위해 타입체크를 위한 추가 코드를 생성한다. ( 참고 ) 그리고 이렇게 만들어진 추가 코드는 타입이 아니기 때문에 제거되지 않은채로 js로 변환된다. 즉, 어플리케이션 로직에는 영향을 주지 않는 오로지 타입체크만을 위한 JS코드가 생기게 되는 것이다 -> 불필요한 코드를 생성한 후 어플리케이션이 실행됨 const enum.. 2023. 2. 19.
런타임때에 사라지는 타입 컴파일 : ts를 js로 변환하면서 코드를 만드는 과정, 타입체킹이 이루어짐 런타임 : 응용프로그램이 실제로 동작되는 때 (참고 : 런타임과 컴파일타임 차이) 타입과 타입 연산자는 자바스크립트 변환 시점(컴파일)에 제거되기 때문에 런타임과 런타임 성능에 영향을 주지 않는다. 왼쪽은 test.ts, 오른쪽은 test.ts를 컴파일한 test.js다. 컴파일된 오른쪽의 test.js에서는 type이 사라졌음을 볼 수 있다. 실제로 js로 컴파일되는 과정에서 타입스크립트의 모든 인터페이스,타입,타입 구문은 제거된다. 이러한 이유로 타입스크립트에서는 런타임에서의 타입과 선언된 타입이 맞지 않을 수 있다. 다음은 이펙티브 타입스크립트에 나오는 예시이다. function setLightSwitch(value:boo.. 2023. 1. 18.
타입스크립트는 타입 오류가 있어도 컴파일을 한다. 타입 오류가 있는 코드도 컴파일된다. 이펙티브 타입스크립트를 사서 보고있는데, 일단 컴파일과 타입체크는 엄연히 다른 말이라고 한다. 14p 코드에 오류가 있을 때 "컴파일에 문제가 있다" 고 말하는 경우를 보았을 겁니다. 그러나 이는 기술적으로 틀린 말입니다. 엄밀히 말하면 오직 코드 생성만이 '컴파일' 이라고 할 수 있기 때문입니다. 작성한 타입스크립트가 유효한 자바스크립트라면 타입스크립트 컴파일러는 컴파일을 해 냅니다. 그러므로 코드에 오류가 있을 때 "타입 체크에 문제가 있다" 고 말하는 것이 더 정확한 표현입니다. 타입 오류가 있는데도 컴파일 된다는 사실 때문에 타입스크립트가 엉성한 언어처럼 보일 수 있다. 그러나 코드에 오류가 있더라도 컴파일된 산출물이 나오는 것이 실제로 도움이 된다고 한다. .. 2023. 1. 18.
반응형