An open API service indexing awesome lists of open source software.

https://github.com/ssi02014/covid19-chart-typescript

๐Ÿ“ˆCOVID19-Chart TypeScript
https://github.com/ssi02014/covid19-chart-typescript

Last synced: 8 months ago
JSON representation

๐Ÿ“ˆCOVID19-Chart TypeScript

Awesome Lists containing this project

README

          

# ๐Ÿ’ป COVID19-Chart

### ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋กœ ์ž‘์„ฑ ๋œ COVID19-Chart๐Ÿ“ˆ๋ฅผ TypeScript๋กœ ์ ์ง„์  ์ ์šฉ ํ”„๋กœ์ ํŠธ


## ๐Ÿ– ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ฝ”๋“œ์— ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ ์šฉํ•  ๋•Œ ์ฃผ์˜ํ•ด์•ผ ํ•  ์ 

- ๊ธฐ๋Šฅ์ ์ธ ๋ณ€๊ฒฝ์€ ์ ˆ๋Œ€ ํ•˜์ง€ ์•Š์„ ๊ฒƒ
- ํ…Œ์ŠคํŠธ ์ปค๋ฒ„๋ฆฌ์ง€๊ฐ€ ๋‚ฎ์„ ๋• ํ•จ๋ถ€๋กœ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ ์šฉํ•˜์ง€ ์•Š์„ ๊ฒƒ
- ์ฒ˜์Œ๋ถ€ํ„ฐ ํƒ€์ž…์„ ์—„๊ฒฉํ•˜๊ฒŒ ์ ์šฉํ•˜์ง€ ์•Š์„ ๊ฒƒ (์ ์ง„์ ์œผ๋กœ strict ๋ ˆ๋ฒจ์„ ์ฆ๊ฐ€)


## ๐Ÿ“– ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํ”„๋กœ์ ํŠธ์— ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ์ ์šฉํ•˜๊ธฐ

0. ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ์— JSDoc์œผ๋กœ ํƒ€์ž… ์‹œ์Šคํ… ์ž…ํžˆ๊ธฐ
1. ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ๊ธฐ๋ณธ ํ™˜๊ฒฝ ๊ตฌ์„ฑ
- [x] NPM ์ดˆ๊ธฐํ™”
- [x] ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์„ค์น˜
- [x] ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ์„ค์ • ํŒŒ์ผ ์ƒ์„ฑ ๋ฐ ๊ธฐ๋ณธ ๊ฐ’ ์ถ”๊ฐ€
- [x] ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ์„ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ๋กœ ๋ณ€ํ™˜
- [x] `tsc` ๋ช…๋ น์–ด๋กœ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ๋ณ€ํ™˜
2. ๋ช…์‹œ์ ์ธ `any` ์„ ์–ธํ•˜๊ธฐ
- `tsconfig.json`ํŒŒ์ผ์— `noImplicitAny`๊ฐ’์„ `true`๋กœ ์ถ”๊ฐ€
- ๊ฐ€๋Šฅํ•œ ๊ตฌ์ฒด์ ์ธ ํƒ€์ž…์œผ๋กœ ํƒ€์ž… ์ •์˜
3. ํ”„๋กœ์ ํŠธ ํ™˜๊ฒฝ ๊ตฌ์„ฑ
- babel, eslint, prettier ๋“ฑ์˜ ํ™˜๊ฒฝ ์„ค์ •
4. ์™ธ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋ชจ๋“ˆํ™”
- ์™ธ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ `npm i`๋กœ ์„ค์น˜
5. `strict`์˜ต์…˜ ์ถ”๊ฐ€ ํ›„ ํƒ€์ž… ์ •์˜


## ๐Ÿ‘จ๐Ÿปโ€๐Ÿ’ป ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํ”„๋กœ์ ํŠธ์— ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ์ ์šฉ ์ ˆ์ฐจ

1. ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ํ™˜๊ฒฝ ์„ค์ • ๋ฐ ts ํŒŒ์ผ๋กœ ๋ณ€ํ™˜
2. any ํƒ€์ž… ์„ ์–ธ
3. any ํƒ€์ž…์„ ๋” ์ ์ ˆํ•œ ํƒ€์ž…์œผ๋กœ ๋ณ€๊ฒฝ

### ๐Ÿƒ 1. ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ํ”„๋กœ์ ํŠธ ํ™˜๊ฒฝ ๊ตฌ์„ฑ

- ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ ํ›„ NPM ์ดˆ๊ธฐํ™” ๋ช…๋ น์–ด๋กœ `package.json` ์ƒ์„ฑ
- ํ”„๋กœ์ ํŠธ ํด๋”์—์„œ `npm i typescript -D`๋กœ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์„ค์น˜
- ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ์„ค์ • ํŒŒ์ผ `tsconfig.json`์„ ์ƒ์„ฑํ•˜๊ณ  ๊ธฐ๋ณธ ๊ฐ’์„ ์ถ”๊ฐ€

```
npm i typescript -D //ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ๋‹ค์šด๋กœ๋“œ
npm init -y //package.json ์ƒ์„ฑ
tsc --init //tsconfig.json ์ƒ์„ฑ
```


```json
{
"compilerOptions": {
"allowJs": true,
"target": "ES5",
"outDir": "./dist",
"moduleResolution": "Node",
"lib": ["ES2015", "DOM", "DOM.Iterable"]
},
"include": ["./src/**/*"],
"exclude": ["node_modules", "dist"]
}
```

- ์„œ๋น„์Šค ์ฝ”๋“œ๊ฐ€ ํฌํ•จ๋œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ์„ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ๋กœ ๋ณ€ํ™˜ํ•œ๋‹ค.
- ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ์ปดํŒŒ์ผ ๋ช…๋ น์–ด tsc๋กœ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ์„ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ๋กœ ๋ณ€ํ™˜ํ•œ๋‹ค.


### ๐Ÿƒ 2. ์—„๊ฒฉํ•˜์ง€ ์•Š์€ ํƒ€์ž… ํ™˜๊ฒฝ(loose type)์—์„œ ํ”„๋กœ์ ํŠธ ๋Œ๋ ค๋ณด๊ธฐ

- ํ”„๋กœ์ ํŠธ์— ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๊ฐ€ ์žˆ๋‹ค๋ฉด ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๊ฐ€ ํ†ต๊ณผํ•˜๋Š”์ง€ ๋จผ์ € ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
- ํ”„๋กœ์ ํŠธ์˜ js ํŒŒ์ผ์„ ๋ชจ๋‘ ts ํŒŒ์ผ๋กœ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค.
- ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ์ปดํŒŒ์ผ ์—๋Ÿฌ๊ฐ€ ๋‚˜๋Š” ๊ฒƒ ์œ„์ฃผ๋กœ๋งŒ ๋จผ์ € ์—๋Ÿฌ๊ฐ€ ๋‚˜์ง€ ์•Š๊ฒŒ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค.
- ์—ฌ๊ธฐ์„œ, **๊ธฐ๋Šฅ์„ ์‚ฌ์†Œํ•˜๊ฒŒ๋ผ๋„ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๋„๋ก ์ฃผ์˜ํ•ฉ๋‹ˆ๋‹ค.**
- ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๊ฐ€ ์„ฑ๊ณตํ•˜๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค


### ๐Ÿƒ 3. ๋ช…์‹œ์ ์ธ any ์„ ์–ธํ•˜๊ธฐ

- ํ”„๋กœ์ ํŠธ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๊ฐ€ ํ†ต๊ณผํ•˜๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค
- ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ์„ค์ • ํŒŒ์ผ์— `noImplicitAny: true`๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.
- ๊ฐ€๋Šฅํ•œ ํƒ€์ž…์„ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ๊ณณ์— ํƒ€์ž…์„ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค.
- ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์“ฐ๋Š” ๊ฒฝ์šฐ [DefinitelyTyped](https://definitelytyped.org/)์—์„œ `@types ๊ด€๋ จ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ`๋ฅผ ์ฐพ์•„ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค.
- ๋งŒ์•ฝ, ํƒ€์ž…์„ ์ •ํ•˜๊ธฐ ์–ด๋ ค์šด ๊ณณ์ด ์žˆ์œผ๋ฉด ๋ช…์‹œ์ ์œผ๋กœ๋ผ๋„ `any`๋ฅผ ์„ ์–ธํ•ฉ๋‹ˆ๋‹ค.
- ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๊ฐ€ ํ†ต๊ณผํ•˜๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.


### ๐Ÿƒ 4. strict ๋ชจ๋“œ ์„ค์ •ํ•˜๊ธฐ

- ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ์„ค์ • ํŒŒ์ผ์— ์•„๋ž˜ ์„ค์ •์„ ์ถ”๊ฐ€ํ•œ๋‹ค.

```json
{
"strict": true, //์ด๊ฑธ trueํ•˜๋ฉด ๋ฐ‘์— ์˜ต์…˜๋“ค ๋ชจ๋‘ true๊ฐ€ ๋จ
"strictNullChecks": true,
"strictFunctionTypes": true,
"strictBindCallApply": true,
"strictPropertyInitialization": true,
"noImplicitThis": true,
"alwaysStrict": true
}
```

- `any`๋กœ ๋˜์–ด ์žˆ๋Š” ํƒ€์ž…์„ ์ตœ๋Œ€ํ•œ ๋” ์ ์ ˆํ•œ ํƒ€์ž…์œผ๋กœ ๋ณ€ํ™˜ํ•œ๋‹ค.
- `as`์™€ ๊ฐ™์€ ํ‚ค์›Œ๋“œ๋ฅผ ์ตœ๋Œ€ํ•œ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋„๋ก ๊ณ ๋ฏผํ•ด์„œ ๋ณ€๊ฒฝํ•œ๋‹ค.


## ๐Ÿ” ๋ชจ๋“ˆํ™” ์ง„ํ–‰์„ ์œ„ํ•œ ํ”„๋กœ์ ํŠธ ํ™˜๊ฒฝ ๊ตฌ์„ฑ

- [ํ”„๋กœ์ ํŠธ ํ™˜๊ฒฝ ๊ตฌ์„ฑ](https://github.com/ssi02014/COVID19-Chart/tree/master/setup)


## ๐Ÿ˜Š ์ถ”๊ฐ€ ํ•™์Šต ๋‚ด์šฉ

- ์˜ต์…”๋„ ์ฒด์ด๋‹ ์—ฐ์‚ฐ์ž`?.`
- ์˜ต์…”๋„ ์ฒด์ด๋‹์„ ์‚ฌ์šฉํ•˜๋ฉด ํ”„๋กœํผํ‹ฐ๊ฐ€ ์—†๋Š” ์ค‘์ฒฉ ๊ฐ์ฒด๋ฅผ ์—๋Ÿฌ ์—†์ด ์•ˆ์ „ํ•˜๊ฒŒ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค.
- `?.`์€ `?.`์™ผ์ชฝ์˜ ํ‰๊ฐ€ ๋Œ€์ƒ์ด `undefined`๋‚˜ `null`์ด๋ฉด ํ‰๊ฐ€๋ฅผ ๋ฉˆ์ถ”๊ณ  `undefined`๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
- ์ฆ‰, `?.`๋Š” ์™ผ์ชฝ ํ‰๊ฐ€๋Œ€์ƒ์— ๊ฐ’์ด ์—†์œผ๋ฉด ํ‰๊ฐ€๋ฅผ ๋ฉˆ์ถ”๊ณ  `?.` ์˜ค๋ฅธ์ชฝ์— ์žˆ๋Š” ๋ถ€๊ฐ€ ๋™์ž‘์€ ๋”๋Š” ์ผ์–ด๋‚˜์ง€ ์•Š๋Š”๋‹ค.

```ts
recoveredList?.appendChild(li);

//์œ„์— ์ฝ”๋“œ์™€ ๋™์ผํ•œ ๊ธฐ๋Šฅ
if (recoveredList === null || recoveredList === undefined) return;
else recoveredList?.appendChild(li);
```

## ๐Ÿ“ƒ ์ฐธ๊ณ  ์ž๋ฃŒ

- [์กด์Šค ํ™‰ํ‚จ์Šค ์ฝ”๋กœ๋‚˜ ํ˜„ํ™ฉ](https://www.arcgis.com/apps/opsdashboard/index.html#/bda7594740fd40299423467b48e9ecf6)
- [Postman API](https://documenter.getpostman.com/view/10808728/SzS8rjbc?version=latest#27454960-ea1c-4b91-a0b6-0468bb4e6712)
- [Type Vue without Typescript](https://blog.usejournal.com/type-vue-without-typescript-b2b49210f0b)