|
| 1 | +## 아이템 01. TS 와 JS 관계 이해하기 |
| 2 | + |
| 3 | +- JS 슈우퍼셋임 |
| 4 | +- TS 라서 무서워하지말 것. JS에서 마이그레이션 할 수 있음. |
| 5 | +- 컴파일과정이 필요함 번거롭지만 뭐 어쩌겠으. |
| 6 | +- 타입을 추론한다는 `정적` 방식은 장점이 있음. |
| 7 | + - 그것은 빌드나 컴파일전에 미리 오류나 문제점들을 알 수 있다는 것. |
| 8 | + - 그래도 만능은 아님 |
| 9 | + - 인생은 엄격하게 살자 |
| 10 | + |
| 11 | +## 아이템 02. TS 설정 이해하기 |
| 12 | + |
| 13 | +- TS 컴파일러 설정 개 많음.... |
| 14 | + - 근데 나중에 찾음 됌 tsconfig.json |
| 15 | +- noImplicitAny : 이거 꼭 설정. 애니있는 타입스크립트는 타입스크립트가 아이다 |
| 16 | +- srtictNullCheck : 널과 언디파인드를 막 할당하지말라 `-_-` 요거 설정해서 의도적 명시할 것. |
| 17 | + - 아무튼 이들 설정은 짜기 힘들지만 고급진 품질코드를 위해 미리하는게 좋음. |
| 18 | + |
| 19 | +## 아이템 03. 코드생성과 타입이 관계없음 |
| 20 | +- TS 컴파일러는 |
| 21 | +1. 컴파일(트랜스파일 TS->JS)함 |
| 22 | +2. 코드 타입 오류 체크해줌ㅋ |
| 23 | + - 하지만 대충.. 컴파일하면 JS 튀어나오긴함 |
| 24 | +- 런.타.임.엔 타.입.체.크. 불가 ㅠ(흠?) |
| 25 | + - 아 뭐 대충 알 것같다... |
| 26 | + - 인스턴스오브 체크는 런타임에... |
| 27 | +- 아무쪼록 태그된 유니온이란 기법이 있어서 요런건 좀 특이하구나... 하고 봄 |
| 28 | + - https://twitter.com/RE_U_CAT/status/1517866788394258432 |
| 29 | +- 타입을 클래스로 만들면, 타입(런타임 접근불가)와 값(런타임 접근가능)을 둘다 쓰기도한다.... |
| 30 | + - 클래스로 만들래... 아 클래스 싫은뎅 -ㅅ- |
| 31 | + - 인스턴스 오브 어쩌구는 아이탬8에서. |
| 32 | +- 타입연산은 런타임에 영향을 주지 않은다는 말은 타입체커를 우회할 수 있군아.... |
| 33 | + - https://twitter.com/RE_U_CAT/status/1517868440048238593 |
| 34 | + - 이거 보면 변환된 코드까지 보면 됨. |
| 35 | + - 그럼 뭐.... 대충 다통과해서 곤란쓰 |
| 36 | +- 런타임 타입은 선언된 타입과 다를 수 있데...? |
| 37 | + - 이유는 뭘까. |
| 38 | + - 흠... 런타임중에(API결과)가 확실히 맞을 수 않을 수 있구나. 불린으로 해서 불린이 온다는 보장이 없단소리군. |
| 39 | +- TS Type 함수를 오버로드 할 쑤 없슴댜 |
| 40 | + - 일반적인 오버로딩 기능은 지원함 |
| 41 | + - 근데 구현체만 남아 안될 수 있음. |
| 42 | + - 하여튼 아이템 50에서 알아보자. |
| 43 | + - https://twitter.com/RE_U_CAT/status/1517879363160920065 |
| 44 | + |
| 45 | +- TS Type는 런타임 성능에 영향 없음. |
| 46 | + - 대신 빌드타임 ^^ (심볼같은걸 다 뗀다.) |
| 47 | + |
| 48 | +## 아이템 04. 구조적 타이핑 익숙ㅋ |
| 49 | +- 덕타이핑이란~ 객체가 어떤 타입에 부합하는 변수와 메서드를 가질 경우, 객체를 해당 타입에 속하는 것으로 간주한다. (오리처럼 걷고, 헤엄치고, 짹짹이면? => 오리다) |
| 50 | +- 일단 타입을 정하고, 구조적으로 만드는데에 익숙해 져야겠네? 음... JS는 걍 짜면 되는데... |
| 51 | +- 그치만 구조적 타이핑에 문제도 있다. |
| 52 | + - JS의 고질적인 0.1 + 0.2 = 0.30000000000000004 요런 문제들 것들! 이런건 체크 못한다. |
| 53 | + - 포함관계에 (?이렇게 써도되나) 3D는 2D 개념을 포함하고 있으니까, 타입체크에서도 회피가능.... 문제가있다. 이런걸 오픈(*타입 확장에 열려있다.)되어있다고 하는구나 `-_-;;;` |
| 54 | +- 어.. 그래서 클래스 방식으로 (슈가 신덱싱) 짜도... 인스턴스가 예상과 다를 수 있다. |
| 55 | + - 구조적으로 짰지만, 사용자가 생성자를 안타는 형태로 해서 타입을 회피하고 선언을 해버리면 원하지않은 결괄를 가져옴. |
| 56 | + - [샘플을 만들었다-링크는 트이터로](https://twitter.com/RE_U_CAT/status/1517894759960150016) |
| 57 | +- 그치만 구조적 타이핑하면 유닛테스팅 쉽게 가능 |
| 58 | + - 이유는 디비에대한 추상화(SQL쿼리가 스트링이고 리턴이 애니라는걸 명시)가 되기에... 아무튼 이건 아이템 51에서 다시보자. |
| 59 | + |
| 60 | +## 아이템 05. Any 타입 쓰지마 |
| 61 | +- 왜? 애니? ㅇㅇ... 근데 디비...리턴되는건 ^^ |
| 62 | +- 아무튼 점진적이고 옵셔널한 타입이있다. |
| 63 | + - 그치만 애니는 쓰지말라... |
| 64 | + - 타입스크립트의 언어가 물러터지기 때문. |
| 65 | + - 타입 왜씀? |
| 66 | + |
| 67 | + |
| 68 | +## 아이템 06. 편집기로 TS 써보기 |
| 69 | +- TSC, TSSERVER 친구가 있다. |
| 70 | +- VSCODE쓰면 짱이다. |
| 71 | +- 아무튼 편집기 짱이니까, 그거 TS접목해서 돌아가도록 설정해서 써라... |
| 72 | + - 쓰면, node 같은걸 Fetch 해 왔을 때, 편집기로 탐색이 가능하다. (==> 타입추론이 라이브러리도 가능하다는 의미. ==근데 d.ts파일이 있어야함ㅋㅋㅋㅋㅋㅋㅋ) |
| 73 | + - https://joshua1988.github.io/ts/usage/declaration.html |
| 74 | + |
| 75 | +## 아이템 07. 타입값들이 집합이라고? |
| 76 | +- 이잉!? 집합이었구나. 나도 첨 알았다. 이런거다.. |
| 77 | +- 엄격한 상속관계가 아니라, 겹치지는 집합으로 표현 된다. 서브타입이 아니면서도 겹쳐질 수 있음 |
| 78 | +- 타입 선언 안해도 타입이 결정될 수 있음 |
| 79 | +- 합집합이나 교집합에 대한 내용도 있으니 집합이라고 생각하면 편하다. 타입은 그래서 집합이다. |
| 80 | +- 네버(never)는 공집합 (얘는 루프문 탈때나 씀) |
| 81 | +- keyof 는 나중에 다시 볼 것 |
| 82 | + |
| 83 | +## 아이템 08. 타입공간과 vs 값공간 씸벌 구분 |
| 84 | +- 타입스크립트를 읽을 때, 타입인지, 값인지 플레이그라운드를 통해서 개념을 익혀라 ㅠㅠㅠㅠ |
| 85 | +- 타입은 값을 안가짐. 그래서 찍어도 안나오고 에러남 |
| 86 | + - interface {} 나, type{} 에만 존재함 |
| 87 | +- 클래쓰나 이넘 같은 키워드는 헐..... 타입, 값 두가지 로 쓸 수 있다. 콘솔로 찍어보니 그릏다. |
| 88 | +- "ㅇㅅㅇ" -> 리터럴이나 타입일 수 있음. 구분은? 알아서 해야지뭐... |
| 89 | +- typeof, this 등등등... 이것들은 타입일 수도 있고 공간 값일 수 있다. |
| 90 | +- 결론은 타입과 값을 구분 잘하라는거고 |
| 91 | + - 매개변수에서도 잘 추론되니까 나눠 쓰라는건데 아이템 20에서 다시볼 내용. |
| 92 | + |
| 93 | +## 아이템 09. 타입 단언ㄴㄴ 타입선언ㅇㅋ |
| 94 | +- 타입 선언과 타입 단언은 둘 다 이건 이 타입이야! 한다지만, 타입 단언은 ㄴㄴ 선언 ㅇㅋ |
| 95 | +- 단언은 오류를 못잡아냄 그러니까 (: Type) 쓰라고 |
| 96 | +- 화살표 함수의 반환타입도 명시하자 |
| 97 | + - 내부에서 아니면 직관적으로 선언하거나 |
| 98 | + - 타입에 확 정의할 것. |
| 99 | +- 내가 TS보다 타입을 더 잘알 때만 단언하거나 null 쓸 것 |
| 100 | +- dom 타입은 55 아이템에서 |
| 101 | +- 접미사 ! 는 타입단언 |
| 102 | +- unknown은 모든 타입의 서브타입. 하지만 뭔가 위험한짓을 하고 있겠지? |
| 103 | + |
| 104 | +## 아이템 10. 객체 래퍼타입 피하자 |
| 105 | +- 래퍼타입 이해하기 |
| 106 | + - 직접사용, 인스턴스 작성 피하기 |
| 107 | + - 객체 래퍼타입은 잘 쓰지말고, 기본형 타입을 쓸 것. |
| 108 | + - String 보다 string |
| 109 | + - Number 보다는 number 같은걸로!!!!! |
| 110 | + |
| 111 | +- 기본형 말고 기본형을 잘 쓰도록 말아둔 래퍼타입이란 전설적인 객체 타입 친구들이 있다. |
| 112 | +- 몽키패치란? 원숭이 장난처럼 중간에 도는 코드에 슉샥 코드로 수정을 가하는 것 |
| 113 | + - 이런식으로 수정을 하면 원래 동작하는 |
| 114 | + "문자문자".charAt 를 |
| 115 | + String.prototype.charAt 로 재 선언해서 해당 위치의 this를 강제바인딩, 결과를 다르게 만들 수 있다. |
| 116 | +- TS는 기본형과 객체타입레퍼를 따로 구분해 모델링 |
| 117 | + |
| 118 | +## 아이템 11. 잉여속성체크한계인지 |
| 119 | +- 와 ... 잉여속성 체크 한계가 뭐야?????? |
| 120 | + - 남는 속성이나 추가한 속성 같은걸 말한거구나. |
| 121 | +- 객체리터럴을 변수에 할당, 함수에 매개변수로 전달할 때, 잉여속성 체크 수행. |
| 122 | + - 오류찾는 효과적인 방법 |
| 123 | + - TS체커가 수행하는 일반적 구조적 할당과, 가능성 체크는 역할이 다름. |
| 124 | +- 잉여속성 체크엔 한계가 있음. 임시변수를 도입하면 건너뛸 순 있는데... |
| 125 | + - https://twitter.com/RE_U_CAT/status/1518135139993530368 |
| 126 | + |
| 127 | + |
| 128 | +## 아이템 12. 함수 표현식에 타입 적용 |
| 129 | +- 아 당연히 선언식과 표현식은 다르지 |
| 130 | + - TS에선 표현식 쓰는게 좋음. 매개변수부터 반환값까지 전체를 함수타입으로 선언하여 재사용 가능한 장점. |
| 131 | +- 매개변수나 반환값에 타입을 명시보다, 함수표현식 전체에 타입구조를 매핑하는게 좋다. |
| 132 | + - 이왕이면 하나로 통합하는것도 좋아. |
| 133 | +- 같은타입 타입 시그니처를 반복적으로 작성된다면 타입을 분리하거나 이미 존재하는 타입이 없나볼 것. 라이브러리를 직접 만들면 공통 콜백을 만들면 좋음. |
| 134 | +- 다른함수나 시그니처를 참고하려면 typeof fn을 쓴다. |
| 135 | + |
| 136 | +## 아이템 13. 타입 vs 인터페이스 |
| 137 | +- 타입과 인터페이스의 차이점과 비슷한점을 이해해야지 |
| 138 | + - 인터페이스 - 타입확장 가능 |
| 139 | + - 타입 - 인터페이스를 확장 가능 |
| 140 | + - 유니온 타입은 있지만 |
| 141 | + - 유니온 인터페이스는 없음. |
| 142 | +- 한타입을 타입과 인터페이스로 작성할 줄 알아야지 |
| 143 | +- 프로젝트에서 어떤걸 할지 결정하고 일관되게 짜야지. 리액트에서 컴포넌트는 타입으로 선언하고 메서드는 인터페이스로 만든다던가 |
| 144 | +- 오.. 선언병합이란게 인터페이스에 있구나. 나중에 많이 씀. |
| 145 | + |
| 146 | +## 아이템 14. 타입 연산과 제너릭 사용으로 반복줄이기 |
| 147 | +- 제너릭 친구를 써서 반복 줄이기다. (DRY) |
| 148 | +- 타입에 이름을 붙여 반복 피하기, Extends 사용해서 인터페이스 반복 피하기. |
| 149 | + - 열심히 반복 줄이기 ... |
| 150 | + |
| 151 | +- 타입간 매핑을 공부하면 좋음... keyof, typeof, 인덱싱, 매핑된 타입 등... |
| 152 | + - 매핑된 타입은 (k in keyof Options) 같은건 순회하면서 Options 내에 k 속성이 있는지 찾는다. (Partial 참조) |
| 153 | + - `80쪽좀 나중에 다시 보자.` |
| 154 | +- 제너릭은 타입을 위한 함수 타입을 반복하는 대신, 제너릭으로 타입간에 매핑가능 |
| 155 | +- 표준라이브러리에 정의된 Pick, Partial, ReturnType 같은 제너릭타입에 익숙하져야..... |
0 commit comments