* ์ฐธ๊ณ ๋ก ํ์ ์คํฌ๋ฆฝํธ ์คํ - ํฐ๋ฏธ๋ ๋ช ๋ น์ด๋
ts-node TSํ์ผ๋ช .ts
* ํจ์์์ TS ์ฌ์ฉํ๋ ๋ฒ
๋ค์๊ณผ ๊ฐ์ด ํจ์์์ ts๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
2๊ฐ์ง ๋ฐฉ๋ฒ!
๊ฐ๊ฐ์ ์ธ์์ ์ฝ๋ก ( :) ๋ค์ ํ์ ์ ๋ช ์ํด์ค๋ค. ๋ํ ๋ฆฌํด๋ด์ฉ์ ๋ํ ํ์ ๋ ์ธ์๋ฅผ ๋ฌถ์ ์๊ดํธ ( ) ๋ค์ ๋ช ์
function sum(a: number, b: number): number {
return a + b;
}
function objSum({ a, b }: { a: number; b: number }): string {
return `${a + b}`;
}
* ๋น๋๊ธฐํจ์์์ TS ์ฌ์ฉํ๋ ๋ฒ
๊ทธ๋ฐ๋ฐ async๊ฐ ๋ถ์, ๋น๋๊ธฐํจ์๋ผ๋ฉด?
๊ทธ๋ฅ ํจ์ ๋ฐฉ์๋๋ก ํจ์ ์ ์ธ๋ถ์ ํ์ ๋ง ์จ์ค์๋ ์๋ฌ๊ฐ ๋ฌ๋ค.
๋น๋๊ธฐํจ์๋ Promise๋ฅผ ๋ฐํํ๋ฏ๋ก, ๋ฆฌํด ํ์ ๋ Promise < > ์ ๋ค๋ฆญ์ผ๋ก ๊ฐ์ธ์ค๋ค.
(ํน์ return๋ฌธ์ ํ์ ์ ์จ์ค ์๋ ์๋ค. as ๋ฅผ ์จ์)
type Person = { id: number; age: number; height: number };
async function getPerson(): Promise<Person[]> { // ๋ฆฌํดํ์
์ Promise๋ก ๊ฐ์ธ์ฃผ๊ธฐ
const res = await fetch(`http://localhost:5008/people`);
if (!res.ok) {
throw new Error();
}
return res.json(); // ํน์ (ํจ์์ ์ธ๋ถ์์ Promise๋ก ๊ฐ์ธ์ง๋ง๊ณ ) ์ฌ๊ธฐ ๋ค์ as any as Person[] ์ผ๋ก ์จ์ค ์๋ ์๋ค
}
getPerson().then((res) => console.log(res[0]));
// ์์) console.log(res[0]) => ์ฝ์์ {id:1, age:25, height:179} ๊ฐ ์ฐํ
* Generic <T> ๋ฅผ ์ฌ์ฉํด ๋ฐ์ดํฐ ํ์ ์ ์ผ๋ฐํ(Generalize) ํ๊ธฐ
์ ๋ค๋ฆญ์ ์ฌ์ฉํด ํ์ ์ ๋ณ์ํํ ์ ์๋ค.
์ฌ๊ธฐ์ T ๋ ๊ผญ T์ฌ์ผ ํ๋ ๊ฒ์ ์๋๊ณ ๋ค๋ฅธ ๋ฌธ์์ฌ๋ ๋๋๋ฐ, ๋ณดํต type์ ์๋ฏธ๋ก t๊ฐ ๋ง์ด ์ฐ์ธ๋ค.
์ ๋ค๋ฆญ์ ํ์ ์์ฑํ ๋๋, ํจ์์์๋ ์ฌ์ฉ ๊ฐ๋ฅ
type Generic<T> = { // ํ์
์ ์ธ๋ถ์์ ๋ฐ์์ T ->
someValue: T; // ๋ด๋ถ์ T ๋ฅผ ๋ฃ์ด์ค ์ ์๋ค
};
type Test = Generic<string>; // ์ฆ, type Test = {someValue: string} ์ด ๋จ
// ํ์
์ ์์ฑํ ๋, ์ํ๋ ํ์
์ ์ธ์๋ก ๋ฐ์์ ๋ฃ์ด์ค.
// ํจ์์์๋ ๋ค์๊ณผ ๊ฐ์ด ์ ๋ค๋ฆญ์ ์ฌ์ฉ ํ ์ ์๋ค
// ์ ๋ค๋ฆญ์, <..> ๊บฝ์ ์์ ๋ฃ์ด๋ ํ์
์ ์์ (value: .. ) ์๋ ๋ฃ์ด์ค์ผ๋ก์จ ํ์
์ ์ผ๋ฐํ!
function someFunc<T>(value: T) {} // <T>(value: T) - ์ผ์ชฝt๊ฐ ์ค๋ฅธ์ชฝ t์ ์ ๋ค์ด๊ฐ๋ค๊ณ ์๊ฐํด๋ณด์
someFunc<string>("hello"); // function someFunc<string>(value: string)
* useState ์์ ์ฌ์ฉํ๊ธฐ
์๋์ ๊ฒฝ์ฐ์ฒ๋ผ useState<number>(1) , ์ด๊ธฐ๊ฐ๊ณผ ํจ๊ป <number>๋ผ๊ณ ํ์ ์ ๋ช ์ํด์ค ์ ์๋ค.
1)
๊ทธ๋ฐ๋ฐ ์์๊ฐ(number, string)์ ๊ฒฝ์ฐ, useState์ ์ด๊ธฐ๊ฐ๋ง ์จ์ค๋ (ํ์ ๋ช ์์์ด๋)
๊ทธ ์ด๊ธฐ๊ฐ์ ๋ง๊ฒ ํ์ ์ด ์ค์ ๋๋ค
์๋ฅผ ๋ค์ด ์ด๊ธฐ๊ฐ์ด ์ซ์๋ก ๋ค์ด๊ฐ ๊ฒฝ์ฐ, ๊ผญ <number>๋ผ๊ณ ํ์ ๋ช ์ํ์ง ์์๋ number๋ก ํ์ ์๋ ์ค์ ๋จ
(์ฆ useState(1) ์ด๋ผ๊ณ ๋ง ์จ๋ ๋๋ค)
(๋ฌธ์์ด์ ๊ฒฝ์ฐ useState<string>("") ์ด๋ผ๊ณ ์ธ ์๋ ์๊ณ , useState("") ๋ง ์จ๋ ์์์ string ํ์ ์ผ๋ก ์ค์ )
2)
๋ฐ๋ฉด, ์ฐธ์กฐ๊ฐ(๊ฐ์ฒด{ }, ๋ฐฐ์ด[ ])์ ์ด๋ ํ ์์ดํ ์ด ๋ด๊ฒผ๋์ง ์ ์ ์๊ธฐ ๋๋ฌธ์ ์ถ๋ก ์ด ๋ถ๊ฐ๋ฅํ์ฌ
ํ์ ์ ์ง์ ์ง์ ํด์ค์ผ ํจ!
3)
๋ํ useState์ ์ด๊ธฐ๊ฐ์ ์๋ฌด๊ฒ๋ ์๋ฃ๊ณ ํ์ ๋ง ๋ช ์ํด๋ฒ๋ฆฌ๋ฉด, (ex. useState<string>() )
๋ช ์๋ ํ์ ๊ณผ ํจ๊ป undefined ๋ ํจ๊ป ํ์ ์ ๋จ๋
์ด๊ธฐ๊ฐ์ ๋ญ๋ผ๋ ๋ฃ์ด์ฃผ๋๋ก ํ์. (string ์ด๋ผ๋ฉด "" ๋น ๋ฌธ์์ด์ด๋ผ๋ ์ง..)
import { useState } from "react";
function App() {
const [counter, setCounter] = useState<number>(1);
const increment = () => {
setCounter((prev) => prev++);
};
return <div onClick={increment}>{counter}</div>;
}
export default App;