Skip to content

Commit 2db1500

Browse files
committed
[1주차] chp2 ~ 4
1 parent bbb237e commit 2db1500

File tree

3 files changed

+161
-0
lines changed

3 files changed

+161
-0
lines changed

백윤서/chapter02/README.md

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
# 2장 타입 시스템
2+
3+
## 2.2 할당 가능성
4+
5+
할당 가능성이란 타입스크립트에서 함수 호출이나 변수에 값을 제공할 수 있는지 여부를 확인하는 것이다. 즉 새롭게 할당된 값의 타입이 이전 값의 타입과 동일한지 확인하는 것이다.
6+
7+
할당 가능성 오류는 `Type ... is not assignable to type...` 형태로 출력된다. 첫 번째로 언급된 type은 코드에서 변수에 할당하려고 시도하는 값, 두 번째 type은 첫 번째 타입, 값이 할당되는 변수이다.
8+
9+
## 2.3 타입 애너테이션
10+
11+
초기 타입을 유추할 수 없는 변수는 진화하는 any라고 부른다. 특정 타입을 강제하는 대신 새로운 값이 할당될 때마다 변수 타입에 대한 이해를 발전시킨다.
12+
13+
타입스크립트는 초깃값을 할당하지 않고도 변수의 타입을 선언할 수 있는 구문인 타입 애너테이션을 제공한다.
14+
```js
15+
let rocker: string;
16+
rocker = "Joan Jett";
17+
```
18+
19+
타입 애너테이션은 타입스크립트가 자체적으로 수집할 수 없는 정보를 타입스크립트에 제공할 수 있다.

백윤서/chapter03/README.md

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
# 3장 유니언과 리터럴
2+
3+
## 3.1 유니언 타입
4+
5+
- 유니언 : 값에 허용된 타입을 두 개 이상의 가능한 타입으로 확장하는 것
6+
7+
유니언 타입으로 정의된 여러 타입 중 하나의 타입으로 된 값의 속성을 사용하려면 코드에서 값이 보다 구체적인 타입 중 하나라는 것을 타입스크립트에 알려야 한다. 이 과정을 내로잉이라고 한다.
8+
9+
## 3.2 내로잉
10+
11+
- 내로잉 : 값에 허용된 타입이 하나 이상의 가능한 타입이 되지 않도록 좁히는 것
12+
13+
타입을 좁히는데 사용할 수 있는 논리적 검사를 타입 가드라고 한다.
14+
15+
### 타입 가드 종류
16+
17+
1. 값 할당을 통한 내로잉
18+
2. 조건 검사를 통한 내로잉
19+
3. typeof 검사를 통한 내로잉
20+
21+
## 3.3 리터럴 타입
22+
23+
원시 타입 값 중 어떤 것이 아닌 특정 원싯값으로 알려진 타입이다. 만약 변수를 `const`로 선언하고 직접 리터럴 값을 할당하면 타입스크립트는 해당 변수를 할당된 리터럴 값으로 유추한다.
24+
25+
유니언 타입 애너테이션에는 리터럴과 원시 타입을 섞어서 사용할 수 있다.
26+
27+
## 3.4 엄격한 null 검사
28+
29+
타입스크립트 컴파일러 옵션 중 `strictNullChecks`를 비활성화하면 코드의 모든 타입에 null, undefined를 추가해야 요즘 변수가 null, undefined룰 할당할 수 없다. 엄격한 null 검사를 활성화해야만 코드가 null, undefined 깞으로 인한 오류로부터 안전한지 여부를 쉽게 파악 가능하다.
30+
31+
### 참 검사를 통한 내로잉
32+
33+
타입스크립트는 잠재적인 값 중 truthy로 확인된 일부에 한해서만 변수의 타입을 좁힐 수 있다. 그러나 값에 대해 알고 있는 것이 falsy 라면, 그것이 빈 문자열인지 undefined인지는 알 수 없다.
34+
35+
```js
36+
let biologist = Math.random() > 0.5 && "Rachel";
37+
38+
if (biologist) {
39+
biologist; // 타입 : string
40+
} else {
41+
biologist; // 타입 : false | string
42+
}
43+
```
44+
45+
else문에서 biologist가 빈 문자열인 경우에는 여전히 string이 될 수 있다.
46+
47+
### 초기값이 없는 변수
48+
49+
변수 타입에 undefined를 추가하면, undefined는 유효한 타입이기 때문에 사용 전에는 정의할 필요가 없음을 나타낸다.

백윤서/chapter04/README.md

Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
1+
# 4장 객체
2+
3+
## 4.1 객체 타입
4+
5+
객체 타입은 객체 리터럴과 유사하게 보이지만 필드 값 대신 타입을 사용해 설명한다.
6+
7+
## 4.2 구조적 타이핑
8+
9+
타입스크립트의 타입 시스템은 구조적으로 타입화되어 있다. 매개변수나 변수가 특정 객체 타입으로 선언되면 타입스크립트에 어떤 객체를 사용하든 해당 속성이 있어야 한다고 말해야 한다.
10+
11+
타입스크립트의 타입 검사기에서 구조적 타이핑은 정적 시스템이 파일을 검사하는 경우이고, 덕 타이이핑은 런타임에서 사용될 때까지 객체 타입을 검사하지 않는 것이다.
12+
13+
### 사용 검사
14+
15+
타입스크립트는 값을 해당 객체 타입에 할당할 수 있는지 확인할 때, 할당하는 값에는 객체 타입의 필수 속성이 있어야 한다. 객체 타입에 필요한 프로퍼티가 객체에 없거나 타입이 일치하지 않는 경우 타입스크립트는 타입 오류를 발생시킨다.
16+
17+
### 초과 속성 검사
18+
19+
변수가 객체 타입으로 선언되고, 초깃값에 객체 타입애서 정의된 것보다 많은 필드가 있다면 타입스크립트에서 타입 오류가 발생한다. 변수를 객체 타입으로 선언하는 것은 타입 검사기가 해당 타입에 예상되는 필드만 있는지 확인하는 방법이기도 하다.
20+
21+
### 중첩된 객체 타입
22+
23+
중첩된 타입을 자체 별치이 객체 타입으로 추출할 수 있다. 중첩된 객체 타입을 고유한 타입 이름으로 바꿔서 사용하면 코드와 오류 메시지가 더 읽기 쉬워진다는 장점이 있다.
24+
25+
## 4.3 객체 타입 유니언
26+
27+
### 유추된 객체 타입 유니언
28+
29+
변수에 여러 객체 타입 중 하나가 될 수 있는 초기값이 주어지면 타입스크립트는 해당 타입을 객체 타입 유니언으로 유추한다. 유니언 타입은 가능한 각 객체 타입을 구성하고 있는 요소를 모두 가질 수 있다.
30+
31+
### 명시된 객체 타입 유니언
32+
33+
객체 타입의 조합을 명시하면 객체 타입을 더 명확히 정의할 수 있기 때문에 객체 타입을 더 많이 제어할 수 있는 이점이 있다. 특히 값의 타입이 객체 타입으로 구성된 유니언이라면 유니언 타입에 존재하는 속성에 대한 접근만 허용한다. 잠재적으로 존재하지 않는 객체의 프로퍼티에 대한 접근을 제한하면 코드의 안전을 지킬 수 있다.
34+
35+
### 객체 타입 내로잉
36+
37+
타입 검사기가 유니언 타입 값에 특정 속성이 포함된 경우에만 코드 영역을 실행할 수 있음을 알게 되면, 값의 타입을 해당 속성을 포함하는 구성 요소로만 좁힌다. 코드에서 객체의 형태를 확인하고 타입 내로잉이 객체에 적용된다.
38+
39+
```js
40+
// in 연산자로 true/false 확인
41+
if("pages" in poem){
42+
poem.pages;
43+
} else{
44+
poem.rhymes;
45+
};
46+
```
47+
48+
### 판별된 유니언
49+
50+
자바스크립트와 타입스크립트에서 유니언 타입으로 된 객체의 또 다른 형태는 객체의 속성이 객체의 형태를 나타내도록 하는 것이다. 이러한 타입 형태를 판별된 유니언이라고 하고, 객체의 타입을 가리키는 속성이 판별값이다.
51+
52+
```js
53+
type PomeWithPages = {
54+
name: string;
55+
number: number
56+
type: 'pages';
57+
}
58+
59+
type PoemWithRhymes = {
60+
name: string;
61+
rhymes: boolean;
62+
type: 'rhymes';
63+
}
64+
65+
type Poem = PoemWithPages | PoemWithRhymes;
66+
67+
const poem: Poem = Math.random > 0.5
68+
? { name: "The Double Image", pages: 7, type: "pages" }
69+
: { name: "Her Kind", rhymes: true, type: "rhymes" };
70+
71+
if(poem.type === "pages"){
72+
// PoemWithPages 타입
73+
}else{
74+
// PoemWithRhymes 타입
75+
}
76+
```
77+
78+
`Poem` 타입은 `type` 속성(프로퍼티)로 어느 타입인지를 나타낸다. 타입 내료잉 없이는 값에 존재하는 속성을 보장할 수 없다.
79+
80+
## 4.4 교차 타입
81+
82+
타입스크립트에서도 교차 타입 `&`을 사용해 여러 타입을 동시에 나타낼 수 있다.
83+
교차 타입은 여러 기존 객체 타입을 별칭 객체 타입으로 결합해 새로운 타입을 생성한다. 교차 타입은 유니언 타입과도 결합할 수 있다.
84+
85+
### 교차 타입의 위험성
86+
87+
- 긴 할당 가능성 오류 : 교차 타입이 복잡할수록 할당 가능성 오류 메시지는 읽기 어려워진다.
88+
89+
- never : 원시 타입의 값은 동시에 여러 타입이 될 수 없기 때문에 교차 타입의 구성 요소로 함께 결합할 수 없다.
90+
91+
```ts
92+
type NotPossible = number & string; // never
93+
```

0 commit comments

Comments
 (0)