일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- HTML
- 애그리게이트
- typeScript
- IAP
- js
- 정처기 자격
- rn
- react native 내부 구조
- 이펙티브 타입스크립트
- TS
- in app purchase
- nextjs route code
- nextjs 라우팅
- 정보처리기사
- nextjs사용이유
- 타입스크립트
- 정처기 준비물
- 속도개선
- react native bridge
- 비동기
- 빌딩 블록
- BOUNDED CONTEXT
- rniap
- 불변식
- DDD
- std::char_traits<unsigned char>
- react natvie
- Aggregate
- nextJS
- 이벤트 시스템
- Today
- Total
nika-blog
타입스크립트의 타입 시스템1 - 이펙티브 타입스크립트 본문
6. 편집기를 사용하여 타입 시스템 탐색하기
기능
- 코드 자동 완성
- 명세 검사
- 검색
- 리팩토링
+ js 에서 typeof null 은 “object” 이므로 아래 코드는 오류가 발생한다.
function getElement(elOrId: string | HTMLElement | null): HTMLElement {
if (typeof elOrId === 'object') {
return elOrId;
// ~~~ 'HTMLElement | null' 형식은 HTMLElement' 형식에 할당할 수 없습니다.
} else if (elOrId === null) {
return document.body;
} else {
const el = document.getElementById(elOrId);
return el;
// ~~~ 'HTMLElement | null' 형식은 HTMLElement' 형식에 할당할 수 없습니다.
}
}
7. 타입이 값들의 집합이라고 생각하기
- strictNullChecks 여부에 따라 null 과 undefined 는 number 에 해당될 수도 아닐 수도 있다.
- 가장 작은 집합 = 아무것도 포함하지 않는 공집합 = never
유니온 타입
유니온 타입 = union = |
두개 혹은 세개의 타입으로 묶을 때
ex.
type AB = 'A' | 'B';
+ 집한의 관점에서 타입 체커의 주요 역할은 하나의 집합이 다른 집합의 부분 집합인지 검사하는 것
인터섹션
인터섹션 = 교집합 = &
주의할점 : 타입 연산자는 인터페이스의 속성이 아닌 값의 집합(타입의 범위)에 적용됨 추가적인 속성을 가지는 값도 여전히 그 타입에 속함
extends
- & 보다 일반적인 방법은 extends 키워드를 사용하는 것
- extends = ~의 부분 집합
- 서브 타입 = 어떤 집합의 다른 집합의 부분 집합
Vector 3D 는 Vector 2D의 서브 타입
+ extends 키워드는 제너릭 타입에서 한정자로도 쓰인다.
+ 할당될 수 없습니다 = 상속될 수 없습니다. = ~의 부분집합이 아닙니다.
interface Point {
x: number:
y: number;
}
type Pointkeys = keyof Point; // 타입은 "x" | "y"
function sortBy<K extends keyof T, T>(vals: T[], key: K): T [] {
//...
}
const pts: Point[] = [{x: 1, y:1}, {x: 2, y:0}];
sortBy(pts, 'x') // 정상
sortBy(pts, 'z') // ~~~ 'z'형식의 인수는 'x' | 'y' 형식의 매개변수에 할당될 수 없습니다.
+ 숫자 배열은 숫자들의 쌍(= 튜플)과는 다른다.
이유 : 타입스크립트는 [number, number] type의 숫자의 쌍을 {0: number, 1: nuber, length: 2}로 길이까지 모델링하기 때문
8. 타입 공간과 값 공간의 심벌 구분하기
symbol은 타입 공간이나 값 공간 중의 한 곳에 존재합니다. 심벌은 이름이 같더라도 속하는 공간에 따라 다른 것을 나타낼 수 있기 때문에 혼란스러울 수 있습니다.
한 심벌이 타입인지 값인지는 어떤 형태로 쓰이는지 문맥을 살펴 알아낼 수 있습니다.
또는 playground에서 js 로 변환되었을 때 사라지는 심벌은 타입이라고 추론 가능합니다.
class 와 enum은 상황에 따라 타입과 값 두가지 모두 사용 가능한 예약어
양쪽 모두 사용 가능한 연산자 : typeof
class로 생성된 타입과 인스턴스 타입은 InstanceType 제너릭을 이용해서 전환할 수 있습니다.
type C = InstanceType<typeof Cylinder>;
두 공간 사이에서 다른 의미를 가지는 코드 패턴들
- this (this 키워드, 다형성 this타입)
- &, I (비트 연산과 인터섹션-유니온)
- const (변수 선언, 리터럴 또는 리터럴 표현식의 추론된 타입)
- extends (서브 클레스 또는 서브 타입 또는 제너릭 타입의 한정자)
- in (루프 또는 매핑된 타입)
+ 타입 스크립트가 잘 동작하지 않는다면 타입 공간과 값 공간을 혼동했을 때 가능성이 있음
구조 분해 할당을 사용할 때 유의할 점
코드조각
9. 타입 단언보다는 타입 선언을 사용하기
타입 단언
const bob = {name : 'nika'} as Person;
타입 선언
const alice: Person = {name: 'Alice'};
타입 단언보다 타입 선언을 사용하는 것이 좋음
이유: 단언은 강제로 타입을 지정했으니 타입 체커에게 오류를 무시하라고 하는 것
참고: 이펙티브 타입스크립트
http://www.yes24.com/Product/Goods/102124327
이펙티브 타입스크립트 - YES24
타입스크립트는 타입 정보를 지닌 자바스크립트의 상위 집합으로, 자바스크립트의 골치 아픈 문제점들을 해결해 준다. 이 책은 《이펙티브 C++》와 《이펙티브 자바》의 형식을 차용해 타입스
www.yes24.com
<타입스크립트의 타입 시스템2>
https://dragon-developer.tistory.com/51
타입스크립트의 타입시스템2 - 이펙티브 타입스크립트
13. 타입과 인터페이스의 차이점 알기 유니온 | 유니온 타입은 있지만, 유니온 인터페이스는 없다. 튜플은 type 으로 인터페이스로 튜플과 비슷하게 구현하면, 튜플에서 사용가능한 concat 같은 메
dragon-developer.tistory.com
'FE > typescript' 카테고리의 다른 글
any다루기 - 이펙티브 타입스크립트 (0) | 2023.02.28 |
---|---|
타입설계 - 이펙티브 타입스크립트 (0) | 2023.02.14 |
타입추론 - 이펙티브 타입스크립트 (0) | 2023.02.07 |
타입스크립트의 타입시스템2 - 이펙티브 타입스크립트 (0) | 2023.02.02 |
타입스크립트 알아보기 - 이펙티브 타입스크립트 (0) | 2022.12.27 |