์ด ๊ธ์ udemy์ Typescript :๊ธฐ์ด๋ถํฐ ์ค์ ํ ํ๋ก์ ํธ๊น์ง with React + NodeJS ๊ฐ์ข๋ฅผ ๋ฐํ์ผ๋ก ์ ๋ฆฌํ ๋ด์ฉ์ ๋๋ค
1. ํ์
pass
2. TypeScript๋ ๋ฌด์์ด๋ฉฐ ์ ์ฌ์ฉํด์ผ ํ๋๊ฐ?
ํ์ ์คํฌ๋ฆฝํธ๋ ์๋ฐ์คํฌ๋ฆฝํธ์ superset ์ ๋๋ค. ์๋ก ๋ง๋ค์ด์ง ์ธ์ด๊ฐ ์๋ ์๋ฐ์คํฌ๋ฆฝํธ ์ธ์ด๋ฅผ ์ฌ์ฉํด ์๋ก์ด ๊ธฐ๋ฅ๊ณผ ์ฅ์ ์ ์ถ๊ฐํ๋ ์ธ์ด์ ๋๋ค. ์ฝ๋๋ฅผ ์คํํ์ฌ ํ์ ์คํฌ๋ฆฝํธ ์ฝ๋๋ฅผ JS๋ก ์ปดํ์ผํ๋ ๊ฐ๋ ฅํ ์ปดํ์ผ๋ฌ์ ๋๋ค. ํ์ ์ ์ถ๊ฐํ์ฌ ๋ธ๋ผ์ฐ์ ๋ฐํ์์์ ์๋ฌ๊ฐ ๋ฐ์ํ๊ธฐ ์ ์ ์ฝ๋์ ์๋ฌ๋ฅผ ๋ฏธ๋ฆฌ ํ์ธํ ์ ์์ต๋๋ค. ๊ฐ๋ฐ ์ค ๋ฐํ์ ์๋ฌ๋ก ๋ฐ์ํ๋ ์๋ฌ๋ฅผ ์ด๊ธฐ์ ์์ ํ ์ ์์ต๋๋ค.
๋จ์ ) ๋ธ๋ผ์ฐ์ ์ ๊ฐ์ ์๋ฐ์คํฌ๋ฆฝํธ ํ๊ฒฝ์์ ์คํํ ์ ์์ต๋๋ค. node.js๋ ๋ง์ฐฌ๊ฐ์ง์ ๋๋ค.
3. ํ์ต ์ปค๋ฎค๋ํฐ
pass
4. Node.js ๋ค์ด๋ก๋
typescriptlang.org ์์ download๋ฅผ ํด๋ฆญํ์ฌ ์ค์น ๋ฐฉ๋ฒ ํ์ธ ๊ฐ๋ฅํฉ๋๋ค. / npm ๋๊ตฌ๋ node.js ํจํค์ง์ ์ผ๋ถ์ ๋๋ค. ์๋ ์ค์นํ ๊ฒ์ ํ์ ์คํฌ๋ฆฝํธ ์ฝ๋๋ฅผ ์ดํดํ์ฌ ์๋ฐ์คํฌ๋ฆฝํธ๋ก ๋ณํํ๊ธฐ ์ํด ์์์ผ ํ๋ ์ปดํ์ผ๋ฌ์ ๋๋ค. tsc ๋ช ๋ น์ด ์ฌ์ฉ์ด ๊ฐ๋ฅํด์ง๋๋ค.
โ ~ yarn global add typescript
yarn global v1.22.11
[1/4] ๐ Resolving packages...
[2/4] ๐ Fetching packages...
[3/4] ๐ Linking dependencies...
[4/4] ๐จ Building fresh packages...
๊ธฐ๋ณธ JS ํ์ผ
const button = document.querySelector("button");
const input1 = document.getElementById("num1");
const input2 = document.getElementById("num2");
function add(num1, num2) {
return num1 + num2;
}
button.addEventListener("click", function () {
console.log(add(input1.value, input2.value));
});
๋๋ํ๋ฅผ ์ถ๊ฐํจ์ผ๋ก์จ ์์๋ฅผ ์ป์ ๊ฒ์์ ts์๊ฒ ์๋ ค์ค ์ ์์ต๋๋ค.
button → 'button' is possibly 'null'
→ const button = document.querySelector("button")!;
ํญ์ input ์์์ด๊ธฐ ๋๋ฌธ์ ํ ๋ณํ์ด๋ผ๋ HTMLInputElement ๋ฅผ ์ฌ์ฉํ ์ ์์์ ์๋ ค์ฃผ๋ฉด ๋ฉ๋๋ค.
Property 'value' does not exist on type 'HTMLElement'
→ const input1 = document.getElementById("num1")! as HTMLInputElement;
๊ฐ์ฅ ํฐ ๊ธฐ๋ฅ์ ํ์ ์ ์ถ๊ฐํ ์ ์๋ค๋ ๊ฒ์ ๋๋ค.
function add(num1: number, num2: number) {
return num1 + num2;
}
์ปดํ์ผ์ ์คํํด๋ณธ ๊ฒฐ๊ณผ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค. js ํ์ผ์ด ์๊ธฐ๊ณ ์๋ฌ๋ ๋ถ๋ถ์ ํ์ธํ ์ ์์ต๋๋ค.
โ first-project tsc using-ts.ts
using-ts.ts:10:19 - error TS2345: Argument of type 'string' is not assignable to parameter of type 'number'.
10 console.log(add(input1.value, input2.value));
~~~~~~~~~~~~
Found 1 error in using-ts.ts:10
ํด๋น ๋ถ๋ถ์ ์์ ํ๊ณ ๋ค์ ์ปดํ์ผ์ ํด๋ด ๋๋ค. ์๋ฌ ์์ด ์คํ๋ฉ๋๋ค. ์ดํ ์์ฑ๋ JS๋ฅผ ํ์ธํด๋ณด๋ฉด TS์์ ์ถ๊ฐํ๋ ๋ถ๋ถ๋ค์ด ๋ค ์ฌ๋ผ์ง๊ณ Pure JS๋ง ๋จ์์๋ ๊ฑธ ๋ณผ ์ ์์ต๋๋ค.
button.addEventListener("click", function () {
console.log(add(+input1.value, +input2.value));
});
5. TypeScript Avantages - Overview
- Types
- Next-gen JavaScript Features (compiled down for older Browers)
- Non-JavaSCript Features like Interfaces or Generics
- Meta-Programming Features like Decorators
- Rich Configuration Options
- Modern Tooling that helps even in non-TypeScript Projects
6. ๊ฐ์๊ฐ์
1. TypeScript Basics
2. Compiler & Configuration Deep Dive
3. Working with Next-gen JS code
4. Classess & Interfaces
5. Advenced Types & TypeScript Features
6. Generics (๊ณ ๊ธ๊ธฐ๋ฅ)
7. Decorators
8. Time to Practice - Full Project
9. Working with Namespaces & Modules
10. Webpack & TypeScript / ์นํฉ์ ๊ทผ๋ ํ๋ก ํธ์๋ ์น ๊ฐ๋ฐ์์ ์ฌ์ฉํ๋ ๊ตฌ์ถ๋๊ตฌ๋ก, TS์ ํจ๊ป ์ฌ์ฉํ๋ฉด ๋ ๋์ ํ๋ก์ ํธ ์ค์ ์ด ๊ฐ๋ฅํจ
11. Third-Party Libraries & TypeScript
12. React + TypeScript & NodeJS + TypeScript
7. ๊ฐ์ ์ต๋ ํ์ฉํ๋ ๋ฒ
- Watch the Videos!
- Code Along
- Practice
- Debug & Search
- Ask & Answer
8. ์ฝ๋ ํธ์ง๊ธฐ/IDE ์ค์ ํ๊ธฐ
9. ๊ฐ์ ํ๋ก์ ํธ ์ค์
tsc app.ts
์ ๋ช ๋ น์ด๋ฅผ js ํ์ผ์ด ์์ฑ๋ฉ๋๋ค. ์ฝ๋์์ ๋ฌด์ธ๊ฐ๋ฅผ ๋ณ๊ฒฝํ ๋๋ง๋ค ์๋์ผ๋ก ๋ค์ ์ปดํ์ผ ํด์ผ ํฉ๋๋ค. ์๋์ผ๋ก ์ด ๊ณผ์ ์ ์คํํ๊ธฐ ์ํด npm์ ์ค์นํฉ๋๋ค.
npm install --save-dev lite-server
--save-dev๋ฅผ ์ ๋ ฅํ์ฌ ์ด๋ฅผ ๊ฐ๋ฐ ์ ์ฉ ์ข ์์ฑ์ผ๋ก ํ์ํฉ๋๋ค. ์ด๋ ๊ฐ๋ฐ ๋์ค ๋์์ด ๋ ๋๊ตฌ์์ ๋ปํฉ๋๋ค. lite-server๋ package.json ํ์ผ ์์ ํญ์ index.html ํ์ผ์ ์ ๊ณตํ๋ ๊ฐ๋จํ ๊ฐ๋ฐ ์๋ฒ์ ๋๋ค.
{
"name": "understanding-ts",
"version": "1.0.0",
"description": "",
"main": "app.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"start": "lite-server" // add
},
"author": "",
"license": "ISC",
"devDependencies": {
"lite-server": "^2.6.1"
}
}