Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 빌딩 블록
- 이벤트 시스템
- nextjs 라우팅
- 정처기 준비물
- HTML
- 정처기 자격
- nextjs route code
- TS
- 이펙티브 타입스크립트
- nextjs사용이유
- typeScript
- BOUNDED CONTEXT
- react natvie
- rniap
- js
- react native 내부 구조
- 속도개선
- DDD
- nextJS
- 정보처리기사
- std::char_traits<unsigned char>
- 불변식
- Aggregate
- 비동기
- in app purchase
- IAP
- 애그리게이트
- rn
- 타입스크립트
- react native bridge
Archives
- Today
- Total
nika-blog
타입스크립트 알아보기 - 이펙티브 타입스크립트 본문
타입스크립트와 자바스크립트의 관계 이해하기
- 타입스크립트 > 자바스크립트
but, 타입체커를 통과한 자바스크립트 극히 일부분
타입스크립트 설정 이해하기
- tsconfig.json 사용 권장 >> 커멘트 라인
- noImplicitAny
변수들이 미리 정의된 타입을 써야하는지 - strictNullChecks
number type 에 null 또는 undefined 사용 불가- | 사용하거나
- null 이나 undefiend 체크해주는 분기처리 해주거나
- noEmitOnError
오류가 있을 때 컴파일 하지 않음
ex.
if(el) {
el.textContent = 'Ready'; // null 제외
}
el!.textContent = 'Ready; // null 제외
코드 생성과 타입이 관계없음을 이해하기
- ts → js : 트랜스파일 : 소스코드를 동일한 동작을 하는 다른 형태의 소스코드로 변환하는 행위, 여전히 컴파일이 필요함.
- 트랙젝션 단계에서, 타입은 모두 사라진다.
- 사라지지 않게 하려면
class 를 사용하거나,
- js → 컴퓨터가 이해하는 저수준 언어 : 컴파일
- typescript 는 빌드 시간에는 영향을 주지만, 컴파일시간에는 영향을 주지 않는다.
런타임 성능에 아무 영향이 없음. - 타입오류가 있는 코드도 컴파일은 가능하다. (빌드 중단 x)
- instanceof (interface로 생성된 타입)하면, 에러 발생.
타입은 런타임 시점에 아무런 역할을 하지 못하고 제거되지 때문. - 타입 정보를 유지하는 방법
- 태그 기법 (tagged union)
ex.
// 태그 기법
interface Square {
kind: 'square';
width: number;
}
interface Rectangle {
kind: 'rectangle';
height: number;
width: number;
}
type Shape = Square | Rectangle;
function calculateArea(shape: Shape) {
if (shape.kind === 'rectangle') {
return shape.width * shape.height;
} else {
return shape.width * shape.width;
}
}
- class 사용
ex.
class Square {
constructor(public width: number) {}
}
class Rectangle extends Square {
constructor(public width: number, public height: number) {
super(width);
}
}
type Shape = Square | Rectangle;
function calculateArea(shape: Shape) {
if (shape instanceof Rectangle) {
return shape.width * shape.height;
} else {
return shape.width * shape.width;
}
}
구조적 타이핑에 익숙해지기
- 자바스크립트는 덕 타이핑(duck-typing) 기반
명제 정의: "만약, 어떤 새가 오리처럼 걷고, 헤엄치고, 꽥꽥거리는 소리를 낸다면 나는 그 새를 오리라고 부를 것이다. " - 자바스크립트 컴파일러를 모델링 했기 때문에, 타입은 더 큰 타입과 혼용해서 사용할 수 있다?
any 타입 지양하기
- Q. 써야하는 순간이 있다면 언제일까?
'FE > typescript' 카테고리의 다른 글
any다루기 - 이펙티브 타입스크립트 (0) | 2023.02.28 |
---|---|
타입설계 - 이펙티브 타입스크립트 (0) | 2023.02.14 |
타입추론 - 이펙티브 타입스크립트 (0) | 2023.02.07 |
타입스크립트의 타입 시스템1 - 이펙티브 타입스크립트 (0) | 2023.02.02 |
타입스크립트의 타입시스템2 - 이펙티브 타입스크립트 (0) | 2023.02.02 |