Skip to content

Commit a0448ca

Browse files
authored
docs: static type checking 추가
1 parent 32f7f9c commit a0448ca

File tree

1 file changed

+309
-0
lines changed

1 file changed

+309
-0
lines changed

Diff for: static-type-checking/chaeeun037/README.md

+309
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,309 @@
1+
# REACT STATIC TYPE CHECKING
2+
3+
### Why?
4+
5+
정적 타입 체커들을 통해 코드 실행 전에 타입 문제를 찾아내고, 자동완성과 같은 기능을 추가해서 개발자의 작업 흐름을 개선한다.
6+
7+
따라서 큰 프로젝트에서는 `PropTypes` 대신에 `Flow` 또는 `TypeScript`를 사용하는 것이 좋다.
8+
9+
10+
11+
## Flow
12+
13+
> 페이스북에서 개발한 Javascript 정적 타입 체커이다. 보통 React와 함께 사용한다.
14+
15+
Flow를 사용하기 위해서는 아래 요구 사항을 만족 해야 합니다.
16+
17+
- Flow를 프로젝트 의존성에 추가합니다.
18+
- 컴파일된 코드에서 Flow 문법이 제거되었는지 확인합니다.
19+
- 타입 주석을 추가하고, 타입을 체크하기 위해 Flow를 실행합니다.
20+
21+
### 프로젝트에 Flow 추가하기
22+
23+
최신 버전 Flow 설치
24+
25+
```sh
26+
yarn add --dev flow-bin
27+
# or
28+
npm install --save-dev flow-bin
29+
```
30+
31+
`package.json` 파일에 "flow" 추가
32+
33+
```json
34+
{
35+
// ...
36+
"scripts": {
37+
"flow": "flow", // ...
38+
},
39+
// ...
40+
}
41+
```
42+
43+
Flow 환경설정 파일 생성
44+
45+
```sh
46+
yarn run flow init
47+
# or
48+
npm run flow init
49+
```
50+
51+
52+
53+
### 컴파일된 코드에서 Flow 문법 제거하기
54+
55+
브라우저는 Flow 관련 문법을 알아차리지 못하기 때문에 컴파일된 JavaScript 번들에서 제거해주어야 한다.
56+
57+
당연히 컴파일한 도구에 따라 해야할 작업은 달라진다.
58+
59+
#### Create React App
60+
61+
자동으로 Flow 문법을 제거해준다.
62+
63+
#### Babel
64+
65+
Flow를 위한 프리셋 설치
66+
67+
```sh
68+
yarn add --dev @babel/preset-flow
69+
# or
70+
npm install --save-dev @babel/preset-flow
71+
```
72+
73+
`.babelrc` 파일에서 `flow` 프리셋 설정
74+
75+
```json
76+
{
77+
"presets": [
78+
"@babel/preset-flow",
79+
"react"
80+
]
81+
}
82+
```
83+
84+
#### 다른 빌드 설정들
85+
86+
[flow-remove-types](https://github.com/flowtype/flow-remove-types)를 사용해서 주석을 제거할 수 있다.
87+
88+
89+
90+
### Flow 실행하기
91+
92+
```sh
93+
yarn flow
94+
# or
95+
npm run flow
96+
```
97+
98+
```sh
99+
No errors!
100+
✨ Done in 0.17s.
101+
```
102+
103+
104+
105+
### Flow 타입 주석 추가하기
106+
107+
기본적으로 Flow는 다음 주석이 포함된 파일만 체크한다.
108+
109+
```jsx
110+
// @flow
111+
```
112+
113+
대체적으로 위 주석은 파일 최상단에 둔다. 프로젝트의 몇몇 파일에 주석을 추가하고 Flow가 어떤 문제를 발견했는지 확인하면 된다.
114+
115+
주석에 상관없이 모든 파일들을 체크하는 [옵션](https://flow.org/en/docs/config/options/#toc-all-boolean)도 있다. 모든 타입을 체크하고자 하는 새로운 프로젝트에 적합하다.
116+
117+
[참고]
118+
119+
- [Flow Documentation: Type Annotations](https://flow.org/en/docs/types/)
120+
- [Flow Documentation: Editors](https://flow.org/en/docs/editors/)
121+
- [Flow Documentation: React](https://flow.org/en/docs/react/)
122+
- [Linting in Flow](https://medium.com/flow-type/linting-in-flow-7709d7a7e969)
123+
124+
125+
126+
## Typescript
127+
128+
> Microsoft가 개발한 프로그래밍 언어이다. Javascript의 타입 슈퍼셋이며 자체 컴파일러를 가지고 있다. 타입 언어이기 때문에 앱이 실행되기 전에 빌드 에러와 버그를 잡을 수 있다.
129+
130+
TypeScript를 사용하기 위해서는 아래 요구 사항을 만족해야 한다.
131+
132+
- 프로젝트 의존성에 TypeScript를 추가한다.
133+
- TypeScript 컴파일러 옵션을 설정한다.
134+
- 올바른 파일 확장을 사용한다.
135+
- 사용하는 라이브러리의 정의를 추가한다.
136+
137+
### Create React App과 함께 타입스크립트 사용하기
138+
139+
별도의 설정 없이 TypeScript를 지원하는 새로운 프로젝트를 생성할 수 있다.
140+
141+
```sh
142+
npx create-react-app my-app --template typescript
143+
```
144+
145+
이미 존재하는 Create React App 프로젝트에도 추가할 수 있다. [참고](https://facebook.github.io/create-react-app/docs/adding-typescript)
146+
147+
148+
149+
### 프로젝트에 TypeScript 추가하기
150+
151+
> Create React App을 사용하지 않는 프로젝트에서 Typescript를 추가하는 방법이다.
152+
153+
최신 버전 Typescript 설치
154+
155+
```sh
156+
yarn add --dev typescript
157+
# or
158+
npm install --save-dev typescript
159+
```
160+
161+
`package.json`파일`"script"``"tsc"` 추가
162+
163+
```json
164+
{
165+
// ...
166+
"scripts": {
167+
"build": "tsc", // ...
168+
},
169+
// ...
170+
}
171+
```
172+
173+
174+
175+
### TypeScript 컴파일러 설정하기
176+
177+
`tsconfig.json`에 tsc 설정을 해야 한다.
178+
179+
```sh
180+
yarn run tsc --init
181+
# or
182+
npx tsc --init
183+
```
184+
185+
[컴파일러 옵션 확인](https://www.typescriptlang.org/docs/handbook/tsconfig-json.html)
186+
187+
tsc를 통해 생성된 js 파일과 소스코드를 구분하기 위해서 다음과 같은 작업을 한다.
188+
189+
- 모든 소스코드는 `src` 디렉토리에 넣는다.
190+
191+
```
192+
├── package.json
193+
├── src
194+
│ └── index.ts
195+
└── tsconfig.json
196+
```
197+
198+
- 소스코드 경로와 컴파일을 통해 생성된 코드 경로를 작성한다.
199+
200+
```json
201+
// tsconfig.json
202+
203+
{
204+
"compilerOptions": {
205+
// ...
206+
"rootDir": "src",
207+
"outDir": "build" // ...
208+
},
209+
}
210+
```
211+
212+
`rootDir`는 소스코드 경로, `outDir`는 tsc를 통해 생성된 코드 경로이다.
213+
214+
`build` 폴더는 `.gitignore`에 추가한다.
215+
216+
개발하기 편하게 `tsconfig.json`파일이 설정된 다음 문서를 참고할 수 있다.
217+
218+
[TypeScript React Starter](https://github.com/Microsoft/TypeScript-React-Starter/blob/master/tsconfig.json)
219+
220+
221+
222+
### 파일 확장자
223+
224+
`.ts`는 TypeScript 파일 기본 확장자이다.
225+
226+
`.tsx``JSX` 문법이 포함된 코드를 위한 확장자이다.
227+
228+
229+
230+
### TypeScript 실행하기
231+
232+
```sh
233+
yarn build
234+
# or
235+
npm run build
236+
```
237+
238+
239+
240+
### 타입 정의
241+
242+
다른 패키지의 오류와 힌트를 출력하기 위해 컴파일러는 선언 파일에 의존한다.
243+
244+
선언 파일은 라이브러리에 대한 모든 타입 정보를 제공한다. 프로젝트의 npm에 라이브러리에 대한 선언파일이 있다면 해당하는 JavaScript 라이브러리를 사용할 수 있다.
245+
246+
라이브러리에 대한 선언을 가져올 수 있는 방법은 두가지가 있다.
247+
248+
#### Bundled
249+
250+
라이브러리가 자신의 선언 파일을 번들한다. 라이브러리가 번들된 타입을 가지고있는지 확인하려면 프로젝트 내에 `index.d.ts` 파일을 보면 된다.
251+
252+
#### [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped)
253+
254+
선언 파일을 번들하지 않은 라이브러리를 위한 거대 저장소이다. 이 저장소의 선언은 Microsoft와 오픈소스 기여자들에 의해 관리되는 크라우드 소스이다.
255+
256+
예를 들어 React는 자체 선언 파일을 번들하지 않는 대신 다읍과 같이 DefinitelyTyped를 통해 다운받을 수 있다.
257+
258+
```sh
259+
yarn add --dev @types/react
260+
# or
261+
npm i --save-dev @types/react
262+
```
263+
264+
**Local Declarations**
265+
266+
사용하고 싶은 패키지가 타입 선언 파일을 번들하지도 않고 DefinitelyTyped에서 제공하지도 않는 경우 로컬 타입 선언 파일을 가질 수 있다.
267+
268+
`declarations.d.ts` 파일을 sourse 디렉토리의 루트에 생성하고 선언하면 된다.
269+
270+
```tsx
271+
declare module 'querystring' {
272+
export function stringify(val: object): string;
273+
export function parse(val: string): object;
274+
}
275+
```
276+
277+
278+
279+
[참고]
280+
281+
- [TypeScript Documentation: Everyday Types](https://www.typescriptlang.org/docs/handbook/2/everyday-types.html)
282+
- [TypeScript Documentation: Migrating from JavaScript](https://www.typescriptlang.org/docs/handbook/migrating-from-javascript.html)
283+
- [TypeScript Documentation: React and Webpack](https://www.typescriptlang.org/docs/handbook/react-&-webpack.html)
284+
285+
286+
287+
## ReScript
288+
289+
> [ReScript](https://rescript-lang.org/)는 JavaScript로 컴파일되는 타입이 있는 언어이다.
290+
291+
핵심 기능 중 몇 가지는 100% 타입 커버리지가 보장된다는 점과 first-class로 JSX를 지원하며, JS와 TS로 작성된 React 코드베이스와의 통합을 허용하기 위한 [React 전용 바인딩](https://rescript-lang.org/docs/react/latest/introduction)이 있다.
292+
293+
이미 작성된 JS와 React 코드베이스에 ReScript를 통합하는 방법에 대한 더 자세한 정보는 [여기](https://rescript-lang.org/docs/manual/latest/installation#integrate-into-an-existing-js-project)에서 찾을 수 있다.
294+
295+
296+
297+
## Kotlin
298+
299+
> [Kotlin](https://kotlinlang.org/)은 JetBrains이 개발한 정적 타입 언어이다. Kotlin의 타깃 플랫폼은 JVM, Android, LLVM, JavaScript이다.
300+
301+
JetBrains은 React 커뮤니티를 위해 [React bindings](https://github.com/JetBrains/kotlin-wrappers)[Create React Kotlin App](https://github.com/JetBrains/create-react-kotlin-app)와 같은 몇몇 도구를 개발, 유지하고 있다. Create React Kotlin App은 별다른 빌드 설정 없이 Kotlin으로 React 앱을 개발할 수 있도록 도와준다.
302+
303+
304+
305+
## 다른 언어들
306+
307+
JavaScript로 컴파일 할 수 있다면 다른 정적 타입 언어들도 React와 호환할 수 있다.
308+
309+
예를 들면 [F#/Fable](https://fable.io/)를 기반으로한 [elmish-react](https://elmish.github.io/react)가 있다.

0 commit comments

Comments
 (0)