$ mkdir ts-practice
$ cd ts-practicenpm install -g typescripttsc --initnpm install --save typescriptํ์ ์คํฌ๋ฆฝํธ๋ ์๋ฐ์คํฌ๋ฆฝํธ์ ํ์ฅ๋ ์ธ์ด๋ก ์๋ฐ์คํฌ๋ฆฝํธ์ "ํ์ "์ ๋ถ์ฌํ ์ธ์ด๋ค. ํ์ ์คํฌ๋ฆฝํธ๋ ์๋ฐ์คํฌ๋ฆฝํธ์ ๋ฌ๋ฆฌ ๋ธ๋ผ์ฐ์ ์์ ์คํํ๋ ค๋ฉด ํ์ผ์ ํ๋ฒ ๋ณํํด์ฃผ์ด์ผ ํ๋ค. (=์ปดํ์ผ)
TypeScript Handbook ํ๊ธ ๋ฌธ์
ํ์ ์คํฌ๋ฆฝํธ๋ ํน์ ๋ณ์ ๋๋ ์์์ ํ์ ์ ์ง์ ํ ์ ์๊ณ ์ฌ์ ์ ์ง์ ํ ํ์ ์ด ์๋ ๊ฐ์ด ์ค์ ๋ ๋ ์๋ฌ๊ฐ ๋ฐ์ํ๋ค. ๋ฐ๋ผ์ ์๋ฌ๋ฅผ ์ฌ์ ์ ๋ฐฉ์งํ ์ ์๋ค.
Boolean, Number, String, Object, Array, Tuple, Enum, Any, Void, Null, Undefined, Never
์ฐธ๊ณผ ๊ฑฐ์ง
let isLoggedIn: boolean = false;let num: number = 10;let str: string = "hi";let arr: number[] = [1, 2, 3];let arr: Array<number> = [1, 2, 3];๋ฐฐ์ด์ ๊ธธ์ด๊ฐ ๊ณ ์ ๋๊ณ ๊ฐ๊ฐ์ ์์๊ฐ ํ์ ์ด ์ง์ ๋์ด ์๋ ๋ฐฐ์ด
let arr: [string, number] = ["hi", 10];ํน์ ๊ฐ(์์)๋ค์ ์งํฉ์ ์๋ฏธํ๋ค.
enum Avengers {
IronMan,
Thor,
}
let hero: Avengers = Avengers.Capt;๋ชจ๋ ํ์ ์ ๋ํด ํ์ฉํ๋ค๋ ์๋ฏธ๋ฅผ ๊ฐ๋๋ค.
let str: any = "hi";const product : any = {
id: "1",
name: "์ฌํฌ",
price: 129000,
sizes: ["M", "L"]
};
const parsedProduct: {
name: string;
price: number;
} = JSON.parse(
"{"name": "์ฌํฌ", "price"; 12000}"
)๋ณ์์๋ undefined์ null๋ง ํ ๋นํ๊ณ ํจ์์๋ ๋ฐํ ๊ฐ์ ์ค์ ํ ์ ์๋ ํ์ ์ด๋ค.
let unuseful: void = undefined;
function notuse(): void {
console.log("sth");
}ํจ์์ ๋์ ์ ๋ ๋๋ฌํ์ง ์๋๋ค๋ ์๋ฏธ๋ฅผ ์ง๋ ํ์ ์ด๋ค.
function neverEnd(): never {
while (true) {}
}ํ์ ์คํฌ๋ฆฝํธ๋ฅผ ์ฌ์ฉํ ๋ ๋ฐฐ์ด์ ๋ด์ฅํจ์๋ฅผ ์ฌ์ฉํ ๋์๋ ํ์ ์ ์ถ๊ฐ ์ฝ๋ค. ํจ์์์ ์๋ฌด๊ฒ๋ ๋ฐํํ์ง ์์์ผ ํ๋ค๋ฉด ๋ฐํ ํ์ ์ void๋ก ์ค์ ํ๋ฉด ๋๋ค.
interface๋ ํด๋์ค ๋๋ ๊ฐ์ฒด๋ฅผ ์ํ ํ์ ์ ์ง์ ํ ๋ ์ฌ์ฉ๋๋ค.
ํน์ ์กฐ๊ฑด์ ์ค์ํด์ผ ํจ์ ๋ช ์ํ ๋ interface๋ฅผ ์ฌ์ฉํ๋ค. implements๋ฅผ ์ฌ์ฉํ์ฌ ํด๋น ํด๋์ค๊ฐ ํน์ interface์ ์๊ตฌ์ฌํญ์ ๊ตฌํํ๋ค๋ ๊ฒ์ ๋ช ์ํ๋ค.
interface Person {
name: string;
age?: number;
}
interface Developer {
name: string;
age?: number;
skills: string[];
}Person๊ณผ Developer์ ํํ๊ฐ ์ ์ฌํ ๋ชจ์ต์ ๋ณผ ์ ์๋ค.
interface Person {
name: string;
age?: number;
}
interface Developer extends Person {
skills: string[];
}์ด์ ๊ฐ์ด extendsํด ์์ ๋ฐ์ ์ ์๋ค.
๋ฌผ์ํ๋ ์ค์ ์ ํด๋ ๋๊ณ ์ํด๋ ๋๋ ๊ฐ์ด๋ผ๋ ๊ฒ์ ์๋ฏธํ๋ค.
/FC
type GreetingsProps = {
name: string;
children: React.ReactNode;
};React.FC๋ฅผ ์ฌ์ฉํ ๋ props ํ์ ์ Generics๋ก ๋ฃ์ด ์ฌ์ฉํ๋ค. props์ ๊ธฐ๋ณธ์ ์ผ๋ก children์ด ๋ค์ด๊ฐ ์๋๋ฐ children์ด ์์ด์ผ ํ๋ ๊ฒฝ์ฐ ์์ด์ผ ํ๋ ๊ฒฝ์ฐ๊ฐ ์๋ค๋ฉด ์ด์ ๋ํ ์ฒ๋ฆฌ๋ฅผ Props ํ์ ์์ children์ ๋ช ์ํด์ผํ๋ค.
const Greetings: React.FC<GreetingsProps> = ({ name, mark }) => (
<div>
Hello, {name} {mark}
</div>
);
Greetings.defaultProps = {
mark: "!",
};mark๋ฅผ defaultProps๋ก ๋ฃ์์ง๋ง ์ค๋ฅ๊ฐ ๋ฌ๋ค.
const Greetings = ({ name, mark }: GreetingsProps) => (
<div>
Hello, {name} {mark}
</div>
);React.FC๋ฅผ ์ฌ์ฉํ์ง ์๋๋ค๋ฉด ์ ์๋ํ๋ค.
์ด์ ๊ฐ์ ์ด์ ๋ก ํ์ฌ๋ React.FC๋ฅผ ์ฌ์ฉํ์ง ์๋ ๊ฒ์ ๊ถ์ฅํ๋ค.
component์ props ์ค ์๋ตํด๋ ๋๋ ๊ฐ์ด ์๋ค๋ฉด ๋ฌผ์ํ(?)๋ฅผ ์ฌ์ฉํ๋ค.
type GreetingsProps = {
name: string;
mark: string;
optional?: string;
};Greetings.tsx
type GreetingsProps = {
name: string;
mark: string;
optional?: string;
onClick: (name: string) => void; // ์๋ฌด๊ฒ๋ ๋ฐํํ์ง ์๋ ํจ์
};
function Greetings({ name, mark, optional, onClick }: GreetingsProps) {
const handleClick = () => onClick(name);
return (
<div>
Hello, {name} {mark}
{optional && <p>{optional}</p>}
<div>
<button onClick={handleClick}>Click Me</button>
</div>
</div>
);
}App.tsx
const App: React.FC = () => {
const onClick = (name: string) => {
console.log(`${name} says hello`);
};
return <Greetings name="Hello" onClick={onClick} />;
};์ ๋๋ฆญ์ ํ์ ์คํฌ๋ฆฝํธ์์ ํจ์, ํด๋์ค, interface, type์ ์ฌ์ฉํ๊ฒ ๋ ๋ ์ฌ๋ฌ ์ข ๋ฅ์ ํ์ ์ ๋ํ์ฌ ํธํ์ ๋ง์ถฐ์ผ ํ๋ ์ํฉ์์ ์ฌ์ฉํ๋ ๋ฌธ๋ฒ์ด๋ค.
function merge<A, B>(a: A, b: B): A & B {
return {
...a,
...b,
};
}
const merged = merge({ foo: 1 }, { bar: 1 });<ํ์ ์ด๋ฆ>์ ๋ฃ์ด ์ฌ์ฉํ๋ฉด ์ ๋๋ฆญ์ ํด๋นํ๋ ํ์ ์๋ ๋ญ๋ ์ง ๋ค์ด์ฌ ์ ์๊ณ ์ฌ์ฉํ ๋ ํ์ ์ด ๊นจ์ง์ง ์๋๋ค.
useState๋ฅผ ์ฌ์ฉํ ๋ ์ ๋๋ฆญ์ ์ฌ์ฉํ์ง ์์๋ ํ์ ์ ์ ์ถํ๊ธฐ ๋๋ฌธ์ ์๋ต ๊ฐ๋ฅํ๋ค. ๊ทธ๋ฌ๋ ์ํ๊ฐ null์ผ ์๋ ์๊ณ ์๋ ์๋ ์์ ๋ ์ ๋๋ฆญ์ ์ฌ์ฉํ๋ฉด ์ข๋ค.
type Information = { name: string; description: string };
const [info, setInformation] = useState<Information | null>(null);enum Job {
Knight = "Knight",
Archer = "Archer",
Mage = "Mage",
Priest = "Priest",
Thief = "Thief",
}
enum Size {
S = "S",
M = "M",
L = "L",
XL = "XL",
}
let product: {
sizes: Size[];
} = {
sizes: [Size.M, Size.S],
};type Cart = string[];
const cart : Cart = {
"์ฌํฌ",
"์ฌ",
};
interface User {
cart: Cart;
}interface๋ฅผ ๊ถ์ฅ
~ ์ด๊ฑฐ๋ (|)
if๋ฌธ, in ์ฐ์ฐ์ ํ์ฉ ๊ฐ๋ฅ