๐Ÿ‘ฉโ€๐Ÿ’ป
Megaptera Frontend
  • ์ฃผ์ฐจ๋ณ„ ํ•™์Šต
    • megaptera-front
    • 1. ๊ฐœ๋ฐœ ํ™˜๊ฒฝ
      • 1. ๊ฐœ๋ฐœ ํ™˜๊ฒฝ
      • 2. TypeScript
      • 3. React
      • 4. Testing Library
      • 5. Parcel & ESLint
      • ํ•œ ์ฃผ๋ฅผ ๋งˆ์น˜๋ฉฐ
    • 2. JSX
      • 1. JSX
      • ํ•œ ์ฃผ๋ฅผ ๋งˆ์น˜๋ฉฐ
    • 3. React๋กœ ์‚ฌ๊ณ ํ•˜๊ธฐ
      • 1. React Component
      • 2. React State
      • ํ•œ ์ฃผ๋ฅผ ๋งˆ์น˜๋ฉฐ
    • 4. React Hooks
      • 1. Express
      • 2. Fetch API & CORS
      • 3. React์˜ Hook
      • 4. useRef & Custom Hook
      • 5. usehooks-ts
      • ํ•œ ์ฃผ๋ฅผ ๋งˆ์น˜๋ฉฐ
    • 5. ํ…Œ์ŠคํŠธ
      • 1. TDD
      • 2. React Testing Library
      • 3. MSW
      • 4. Playwright
      • ํ•œ ์ฃผ๋ฅผ ๋งˆ์น˜๋ฉฐ
    • 6. External Store
      • 1. External Store
      • 2. TSyringe
      • 3. Redux ๋”ฐ๋ผํ•˜๊ธฐ
      • 4. usestore-ts
      • ํ•œ ์ฃผ๋ฅผ ๋งˆ์น˜๋ฉฐ
    • 7. React Router
      • 1. Routing
      • 2. Routes
      • 3. Router
      • 4. Navigation
      • ํ•œ ์ฃผ๋ฅผ ๋งˆ์น˜๋ฉฐ
    • 8. CSS in JS
      • 1. Design System
      • 2. Style Basics
      • 3. CSS in JS
      • 4. styled-components
      • 5. props์™€ attrs
      • 6. Global Style & Theme
      • ํ•œ ์ฃผ๋ฅผ ๋งˆ์น˜๋ฉฐ
    • 9. ์‡ผํ•‘๋ชฐ ๋ชฉ๋ก, ์ƒํ’ˆ ํŽ˜์ด์ง€
      • 1. ๊ฐœ๋ฐœํ•˜๊ธฐ ์ „ ์ค€๋น„
      • 2. ๋ชฉ๋ก ๋ณด๊ธฐ
      • 3. ์ƒํ’ˆ ์ƒ์„ธ ๋ณด๊ธฐ
      • 4. ์žฅ๋ฐ”๊ตฌ๋‹ˆ ๋ณด๊ธฐ
      • 5. ์žฅ๋ฐ”๊ตฌ๋‹ˆ์— ์ƒํ’ˆ ๋‹ด๊ธฐ
      • ํ•œ ์ฃผ๋ฅผ ๋งˆ์น˜๋ฉฐ
    • 10. ์‚ฌ์šฉ์ž ์ธ์ฆ, ์ธ๊ฐ€
      • 1. ๋กœ๊ทธ์ธ
      • 2. ๋กœ๊ทธ์•„์›ƒ
      • 3. ํšŒ์›๊ฐ€์ž…
      • 4. ์ฃผ๋ฌธ ๋ชฉ๋ก & ์ฃผ๋ฌธ ์ƒ์„ธ
      • ํ•œ ์ฃผ๋ฅผ ๋งˆ์น˜๋ฉฐ
    • 11. ์ฃผ๋ฌธ, ๊ฒฐ์ œ
      • 1. ๋ฐฐ์†ก ์ •๋ณด ์ž…๋ ฅ
      • 2. ํฌํŠธ์› ๊ฒฐ์ œ ์š”์ฒญ
      • 3. ๋ฐฐ์†ก ๋ฐ ๊ฒฐ์ œ ์ •๋ณด ์ „๋‹ฌ
      • ํ•œ ์ฃผ๋ฅผ ๋งˆ์น˜๋ฉฐ
    • 12. ์–ด๋“œ๋ฏผ
      • 1. ๊ด€๋ฆฌ์ž ์›น ์‚ฌ์ดํŠธ ๊ฐœ๋ฐœ ์‹œ์ž‘
      • 2. ๋กœ๊ทธ์ธ, ์‚ฌ์šฉ์ž ๋ชฉ๋ก
      • 3. ์นดํ…Œ๊ณ ๋ฆฌ ๊ด€๋ฆฌ
      • 4. ์ฃผ๋ฌธ ๊ด€๋ฆฌ
      • 5. ์ƒํ’ˆ ๊ด€๋ฆฌ
      • ํ•œ ์ฃผ๋ฅผ ๋งˆ์น˜๋ฉฐ
Powered by GitBook
On this page
  • 1. REPL
  • ts-node
  • 2. TypeScript
  • Interface vs Type
  • Interface
  • Type
  • ํƒ€์ž… ์ถ”๋ก 
  • Union Type vs Intersection Type
  • Union Type
  • Intersection Type
  • Optional Parameter
  1. ์ฃผ์ฐจ๋ณ„ ํ•™์Šต
  2. 1. ๊ฐœ๋ฐœ ํ™˜๊ฒฝ

2. TypeScript

Previous1. ๊ฐœ๋ฐœ ํ™˜๊ฒฝNext3. React

Last updated 2 years ago

1. REPL

REPL(read-eval-print loop) CLI, ์ฝ˜์†” ํ™˜๊ฒฝ, ์ธํ„ฐ๋ž™ํ‹ฐ๋ธŒ ํ†ฑ๋ ˆ๋ฒจ(interactive toplevel), ๋žญ๊ธฐ์ง€ ์…ธ(language shell) ๋“ฑ์œผ๋กœ๋„ ๋ถˆ๋ฆผ ๋‹จ์ผ ์‚ฌ์šฉ์ž์˜ ์ž…๋ ฅ์„ ๋ฐ›์•„ ์ด๋ฅผ ํ‰๊ฐ€(์‹คํ–‰)ํ•˜๊ณ  ๊ฒฐ๊ณผ๋ฅผ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ฐ˜ํ™˜ํ•˜๋Š” ์ปดํ“จํ„ฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํ™˜๊ฒฝ

ts-node

ts-node๋Š” TypeScript ์‹คํ–‰๊ธฐ์ด๋ฉด์„œ Node.js์šฉ REPL ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋Š” ์ปดํŒŒ์ผ ์–ธ์–ด์ด๊ธฐ ๋•Œ๋ฌธ์— ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋กœ ๋ณ€ํ™˜์ด ํ•„์š” ๐Ÿ’ก ts-node๋Š” ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋กœ ๋ณ€ํ™˜ํ•ด์ฃผ๊ธฐ ๋•Œ๋ฌธ์— ์ปดํŒŒ์ผ ์—†์ด๋„ Node.js์—์„œ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ง์ ‘ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Œ ๐Ÿ’ก ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์—์„œ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ์ฝ”๋“œ๋ฅผ ํ…Œ์ŠคํŠธํ•  ์ˆ˜ ์žˆ์Œ

// REPL ์‹คํ–‰
npx ts-node


// ์ข…๋ฃŒ
Ctrl + C or .exit
  • ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์—์„œ๋งŒ ์ด์šฉํ•  ๊ฒƒ

    • npm install -D typescript

    • npm install -D ts-node

2. TypeScript

JS + TS ๋ฌธ๋ฒ• (syntax) ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์— ํƒ€์ž…๋ฌธ๋ฒ•์„ ์ถ”๊ฐ€ํ•ด์„œ ๋งŒ๋“  ์Šˆํผ์…‹์œผ๋กœ, ํƒ€์ž… ๊ฐœ๋…์„ js์— ๋„์ž…ํ•œ ๊ฒƒ ์ •์  ํƒ€์ž…์˜ ํŠน์„ฑ์„ ๊ฐ€์ง€๊ณ  ์žˆ๊ณ , ์ตœ์ข…์ ์œผ๋กœ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋กœ ์ปดํŒŒ์ผ๋จ ๐Ÿ’ก ์ปดํŒŒ์ผ์ด๋ž€, ๋ฒˆ์—ญ์˜ ๊ฐœ๋…

Interface vs Type

๊ฑฐ์˜ ๋น„์Šทํ•˜๊ณ , ๋Œ€์ฒด๋กœ ์„ ํ˜ธ์— ๋”ฐ๋ผ ์„ ํƒ ํƒ€์ž… ํ™•์žฅ ๋ฐฉ๋ฒ• ๋“ฑ์—์„œ ์ฐจ์ด๊ฐ€ ์กด์žฌ (์ธํ„ฐํŽ˜์ด์Šค - ํ™•์žฅ ๊ฐ€๋Šฅ, ํƒ€์ž… - ํ™•์žฅ ๋ถˆ๊ฐ€๋Šฅ)

Interface

์ธํ„ฐํŽ˜์ด์Šค๋Š” ๊ฐ์ฒด์ฒ˜๋Ÿผ { } ๋กœ ์„ ์–ธ extends๋กœ ํ™•์žฅํ•ด์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ

interface Person {
    name: string;
    age: number;
};

Type

ํƒ€์ž…์„ ์žก์•„์ฃผ๋Š” ๊ฒƒ ํƒ€์ž…์€ ๋ณ€์ˆ˜์ฒ˜๋Ÿผ = ์„ ์‚ฌ์šฉํ•ด ํ• ๋‹นํ•˜๋ฉฐ, ํ•„์š”ํ•œ ๊ฒƒ์„ ๋‹ค ์ง‘์–ด๋„ฃ์„ ์ˆ˜ ์žˆ์Œ

type Human = {
  name: string;
  age: number;
};

ํƒ€์ž… ์ถ”๋ก 

ํƒ€์ž…์„ ์ผ์ผ์ด ์žก์•„์ฃผ๊ธฐ ํž˜๋“ค ๋•Œ, ๋ชจ๋“  ํƒ€์ž…์„ ๋‹ค ์ ์–ด์ฃผ์ง€ ์•Š๋”๋ผ๋„ ์•Œ์•„์„œ ํƒ€์ž…์„ ์ถ”๋ก ํ•ด์คŒ

๐Ÿ’ก ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ์™€ VS Code ๋ชจ๋‘ ๋งˆ์ดํฌ๋กœ์†Œํ”„ํŠธ๊ฐ€ ๊ฐœ๋ฐœ ๋งˆ์ดํฌ๋กœ์†Œํ”„ํŠธ๊ฐ€ VS Code๋ผ๋Š” IDE๋ฅผ ์ง์ ‘ ๋งŒ๋“  ์ด์œ ๋Š” ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ „ํŒŒํ•˜๊ธฐ ์œ„ํ•จ VS Code๋Š” ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ์™€ ์ผ๋ ‰ํŠธ๋ก ์œผ๋กœ ๋งŒ๋“ค์—ˆ๊ธฐ ๋•Œ๋ฌธ์—, ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋Š” IDE์™€ ํ†ตํ•ฉ๋˜์–ด ์ž๋™ ์™„์„ฑ์ด ์ง€์›๋˜๊ณ  ์˜ค๋ฅ˜๋ฅผ ์บ์น˜ํ•˜๊ธฐ ์‰ฌ์›€ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๊ฐ€ JS์™€ ๋†’์€ ํ˜ธํ™˜์„ฑ์„ ๊ฐ€์ง€๋Š” ์ด์œ ๋Š” ์œ ์ €๊ฐ€ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š” ์„œ๋น„์Šค๋ฅผ ๊ณ„์† ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•จ

๐Ÿ“… ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ : 2012๋…„ 10์›” 1์ผ ๐Ÿ“… VS Code : 2015๋…„ 4์›” 29์ผ

Union Type vs Intersection Type

Union Type

ํ•ฉ์ง‘ํ•ฉ ์—ฌ๋Ÿฌ ํƒ€์ž… ์ค‘ ํ•˜๋‚˜์ผ ์ˆ˜ ์žˆ์Œ์„ ์„ ์–ธํ•˜๋Š” ๋ฐฉ๋ฒ•

type MyBool = true | false;

๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์ œํ•œํ•  ๋•Œ ์œ ์šฉ

type Category = 'food' | 'toy' | 'bag';

function fetchProducts({ category }: { category: Category }) {
  console.log(`Fetch ${category}`);
}

๋ ˆ๊ฑฐ์‹œ ํ™˜๊ฒฝ ๋˜๋Š” ์ฝ”๋“œ์—์„œ ์‚ฌ์šฉ

export type ReactNode =
  | React$Element<any>
  | ReactPortal
  | ReactText
  | ReactFragment
  | ReactProvider<any>
  | ReactConsumer<any>;

Intersection Type

๊ต์ง‘ํ•ฉ ํƒ€์ž…์„ ํ™•์žฅํ•˜๋Š” ๋ฐฉ๋ฒ•, ์—ฌ๋Ÿฌ ์†์„ฑ์„ ๊ฐ€์ง

type Human = {
  name: string;
  age: number;
};

type Creature = {
  hp: number;
  mp: number;
};

type Person = Human & Creature;

let person: Person;

person = { name: 'ํ™๊ธธ๋™', age: 13, hp: 256, mp: 16 };

Optional Parameter

ํ•จ์ˆ˜์— ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ๋„ฃ์ง€ ์•Š์œผ๋ฉด undefined๊ฐ€ ๋‚˜์˜ด ํƒ€์ž…์„ ์‚ฌ์šฉํ•˜๋ฉด ๋ฌด์กฐ๊ฑด ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ๋„ฃ๋„๋ก ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ๋„ฃ์ง€ ์•Š๊ณ ๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก Optional Parameter๋ฅผ ์‚ฌ์šฉ ๋ฌผ์Œํ‘œ ๊ธฐํ˜ธ(?)

์‚ฌ์šฉ ๋ฐฉ๋ฒ•

// Optional Parameter ์‚ฌ์šฉ 
function greeting(name?: string): string {
  return `Hello, ${name || 'world'}`;
}


// ๊ธฐ๋ณธ๊ฐ’ ์„ค์ • 
function greeting(name: string = 'world'): string {
    return `Hello, ${name}`;
}

๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ์˜ค๋ธŒ์ ํŠธ์ผ ๋•Œ ๋งŽ์ด ํ™œ์šฉ

function greeting({ name, age }: {
  name: string;
  age?: number;  
}): string {
  return age ? `${name} (${age})` : name;
}
  • โš ๏ธ ts-node์—์„œ๋Š” ํ•œ ์ค„๋กœ ๋ถ™์—ฌ ์“ฐ๊ฑฐ๋‚˜, type ๋“ฑ์œผ๋กœ ๋”ฐ๋กœ ๋ถ„๋ฆฌํ•ด์•ผ ํ•ด์„ ๊ฐ€๋Šฅ

์›๋ž˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—๋Š” ํƒ€์ž…์ด ์—†์—ˆ๊ธฐ ๋•Œ๋ฌธ ๋Œ€ํ‘œ์ ์œผ๋กœ

npm ts-node
typescrip ๊ณต์‹๋ฌธ์„œ
ํƒ€์ž… ๋ณ„์นญ๊ณผ ์ธํ„ฐํŽ˜์ด์Šค์˜ ์ฐจ์ด์ 
ํƒ€์ž… ์ถ”๋ก 
ReactNode
Optional Parameter