Typescript
1. ๋ฐฐ์ฐ๋ ์ด์
2. ๊ธฐ์ด
2.1. Composing
2.1.1. Unions
2.1.2. Generics
2.2. Structural Type System
3. jsํ์ผ์ tsํ์ผ๋ก ๋ฐ๊พธ๊ธฐ
Typescript
์ฐธ๊ณ : https://www.typescriptlang.org/docs/handbook/typescript-in-5-minutes.html (Typescript ๊ณต์ ์ฌ์ดํธ)
1. ๋ฐฐ์ฐ๋ ์ด์
JS์์๋ Type์ด ๊ณ์ ์ฒดํฌ๋์ง ์๋๋ค.
1. ์ด๋ ์๋ฌต์ ํ๋ณํ, hoisting, ๋ณต์ก์ฑ ๋ฌธ์ ๋ฅผ ์ผ์ผํฌ ์ ์๋ค. ์ด๋ฌํ ์ฝ๋ ์์ ์์์น ๋ชปํ ๋ฒ๊ทธ๋ฅผ ์์ ๊ธฐ ์ํด typescript๋ฅผ ์ฃผ๋ก ์ฌ์ฉํ๋ค.
hoisting : ๋์ด์ฌ๋ฆฐ๋ค๋ ๋ป. javascript์์ ์ ์ธ๋ฌธ์ ๋์ด์ฌ๋ ค ์ฝ๋์์ ์ฌ์ฉํ ๋ ์์์ ์๊ด์์ด ์ฌ์ฉ ๊ฐ๋ฅํ๋๋ก ํ๋ ๊ธฐ์ .
typescript๋ ๋ณต์กํ ์์ธ์ฒ๋ฆฌ ์ฝ๋ ์์ด ์ด๋ฅผ ์ํํ๋ค.
2. ํ์ ์์๋ ์ถํ์ ๋ณธ์ธ์ด ์ง ์ฝ๋๋ฅผ ๋ณด์์ ๋ ํ์ ์ด ์ ์๋์ด ์์ง ์๋ค๋ฉด ํ๋์ฉ ๋ณ์๋ฅผ ์ฐ์ด๋ณด๋ ์๋ฐ์ ์๋ค. ์ด๋ฌํ ๋ถํธ์ ๋ง๊ณ ๊ฐ๋ฐ ์์ฐ์ฑ์ ๋์ด๊ธฐ ์ํ typescript๋ฅผ ์ฌ์ฉํ๋ค.
2. ๊ธฐ์ด
interface User {
name: string;
id: number;
}
const user: User = {
name: "Hayes",
id: 0,
};
์์ ๊ฐ์ด ๊ตฌํํ๋ฉด, user๋ผ๋ ๋ณ์๋ User๋ผ๋ ์ธํฐํ์ด์ค์ ํ์ ์ด ๋์ผํด์ผํจ์ ์ ์ ์๋ค.
typescript๋ ๊ธฐ์กด์ javascript ํ์ ์์ ์ถ๊ฐ์ ์ผ๋ก ๋ช๊ฐ์ง ํ์ ์ ๋ ๊ฐ๋๋ค. ๊ทธ๊ฒ์ any(๋ญ๋ ์ง ๊ฐ๋ฅ), unknown(ํ์ ์ ์ ํ๋ผ๊ณ ๋ช ์), never(์ด ํ์ ์ ์ ๋ ์๋จ), void(undefined๋ฅผ ๋ฐํํ๊ฑฐ๋ ๋ฐํํ๋ ๊ฐ์ด ์๋ ํจ์)
2.1. Composing
๋ณต์กํ ํ์ ์ ๋ง๋๋ ๋ฐฉ๋ฒ์๋ ๋๊ฐ์ง๊ฐ ์๋ค.
- Unions
- Generics
2.1.1. Unions
string์ด๋ number ๋ค์ ์ธํธ๋ฅผ ํ ๋ฒ์ ์ ์ํ ์ ์๋ค.
type WindowStates = "open" | "closed" | "minimized";
๋ฟ๋ง ์๋๋ผ ์๋ก ๋ค๋ฅธ type์ ํฉ์น ์๋ ์๋ค.
2.1.2. Generics
๋ค๋ฅธ ์ธ์ด์์์ ์ ๋ค๋ฆญ๊ณผ ๊ฐ์ ์๋ฏธ์ด๋ค.
interface Backpack<Type>{
add: (obj: Type) => void;
get: () => Type;
}
declare const backpack: BackPack<string>;
2.2. Structural Type System
typescript์ ๊ธฐ์ด ์๋ฆฌ๋ type check ์ ํด๋น ๋ณ์๊ฐ ๊ฐ์ง๊ณ ์๋ ๋ชจ์์ ์ง์คํ๋ ๊ฒ์ด๋ค. ์ด๊ฒ์ duck typing ๋๋ structural typing์ด๋ผ๊ณ ๋ถ๋ฅธ๋ค.
์๋ฅผ ๋ค์ด dictionary ๋๋ map์ด๋ผ๊ณ ๋ถ๋ฆฌ๋ structure๋ ์์ key, value๊ฐ ๋ช ์์ด ์๋ ๋๊ฐ์ ๋ชจ์์ผ๋ก ๋ณด๋ ๊ฒ์ด๋ค.
3. jsํ์ผ์ tsํ์ผ๋ก ๋ฐ๊พธ๊ธฐ
jsํ์ผ์ tsํ์ผ๋ก ๋ฐ๊พธ๋๊น ์๊ธฐ๋ ๋ฌด์ํ ๋ง์ ์๋ฌ...

์๋์ ๊ณผ์ ์ ๊ฑฐ์ณ์ ํด๊ฒฐํ์๋ค.
- https://velog.io/@kyusung/eslint-tslint-config
- https://flamingotiger.github.io/javascript/eslint-setup/#2-1-eslint-config-airbnb-%EB%A1%9C-%EC%84%A4%EC%B9%98%ED%95%98%EA%B8%B0
์์ ๋ธ๋ก๊ทธ๋ฅผ ์ฐธ๊ณ ํด์ .eslintrc ํ์ผ์ settingํด์ฃผ์๋ค.
typescript๊ฐ ๊น๋ ค์์ง ์๋์, typescript๋ฅผ ์ค์นํด์ฃผ๋๊น tsconfig.json ํ์ผ์ด ์๊ฒผ๋ค.
๊ฐ์๊ธฐ appTsConfig.compilerOptions[option] = true ์๋ฌ๊ฐ ๋์์ ํด๊ฒฐํ์๋ค. tsconfig.json ํ์ผ์ ์์ ๊ณ ๋ค์ ๋ง๋๋ ์์ผ๋ก ๊ตฌ๋ํ๋ฉด ๋๋ค.
- https://chinsun9.github.io/
- f1 => select typescript version => use Workspace version
VScode์์ react-jsx๊ฐ ์๋ค๊ณ , typescript๋ฅผ ๋ ๋์ ๋ฒ์ ์ ์ฐ๋ผํด์ ํด๊ฒฐํ์๋ค. VScode์์์ typescript ์ฌ์ฉ setting์ ๋ฐ๊ฟ์ฃผ๋ฉด ๋๋ค.
An import path cannot end with a '.tsx' extension. Consider importing './App' instead. ์๋ฌ๊ฐ ๋ ์ ํด๊ฒฐํ์๋ค. ๊ด๋ จ rule์ ๋นํ์ฑํ ์ฒ๋ฆฌํด์ฃผ๋ฉด ๋๋ค.
tsx๋ก ํ์ผ ๋ชจ๋ ๋ณ๊ฒฝํ๋ ์ค typescript ํ์ผ์ jsx๋ฅผ ์ธ์ํ์ง ๋ชปํ๋ ์ค๋ฅ๊ฐ ๋ฐ์ํ์ฌ ํด๊ฒฐํ์๋ค. ํ์ผ ์ด๋ฆ์ .tsx ํ์ฅ์๋ก ์ง์ ํ๊ณ tsconfig.json ํ์ผ์ jsx ์์ฑ์ react-jsx๋ก ํ๋ฉด ๋๋ค.
Comment