2. TypeScript

Keyword

  1. REPL

  2. TypeScript

    • 2-1 Interface vs Type

    • 2-2 νƒ€μž… μΆ”λ‘ 

    • 2-3 Union Type vs Intersection Type

    • 2-4 Optional Parameter

1. REPL

Read-Eval-Print Loop의 μ•½μž 인터프리터 μ–Έμ–΄μ—μ„œ μ‚¬μš©λ˜λŠ” λŒ€ν™”ν˜• 개발 도ꡬ λ˜λŠ” ν™˜κ²½μœΌλ‘œ 터미널에 μ½”λ“œλ₯Ό μž…λ ₯ν•˜λ©΄ μ¦‰μ‹œ μ‹€ν–‰ κ²°κ³Όλ₯Ό 받을 수 μžˆλ‹€.


2. TypeScript

TypeScriptλŠ” 동적 νƒ€μž… 언어인 JavaScript에 μ •μž‘ νƒ€μž…μ„ λΆ€μ—¬ν•œ 언어이닀. λΈŒλΌμš°μ €λŠ” JavaScript 파일만 μ‹€ν–‰ κ°€λŠ₯ν•˜λ―€λ‘œ λ³€ν™˜ 과정인 컴파일이 ν•„μš”ν•˜λ‹€.

μ™œ νƒ€μž…μŠ€ν¬λ¦½νŠΈλ₯Ό μ‚¬μš©ν•΄μ•Όν• κΉŒ?

  1. μ½”λ“œ λ ˆλ²¨μ—μ„œ μ—λŸ¬μ˜ 사전 예방

  2. νŽΈμ§‘κΈ°μ˜ μ½”λ“œ κ°€μ΄λ“œ 및 μžλ™ μ™„μ„± κΈ°λŠ₯ (개발 생산성 ν–₯상)

    • νŠΉμ • λ³€μˆ˜μ— νƒ€μž…μ΄ μ§€μ •λ˜μ–΄ μžˆμ„κ²½μš° ν•΄λ‹Ή νƒ€μž…μ˜ μ‚¬μš©κ°€λŠ₯ν•œ APIλ₯Ό 미리 보기둜 κ°€μ΄λ“œ ν•΄μ€€λ‹€.

μ§„μ§œ 2번이 μ§„λ˜λ² κΈ°

VSC 툴의 λ‚΄λΆ€κ°€ TS둜 μž‘μ„±λ˜μ–΄ μžˆμ–΄ TSκ°œλ°œμ— μ΅œμ ν™”λ˜μ–΄ μžˆλ‹€κ³  ν•œλ‹€.

2-1 Interface vs Type

TypeScriptμ—μ„œ νƒ€μž…μ„ μ •μ˜ν•˜λŠ” λ°©λ²•λ“€λ‘œ Type(Type alias)κ³Ό Interface의 결정적 μ°¨μ΄λŠ” νƒ€μž…μ˜ ν™•μž₯(extends) κ°€λŠ₯ 여뢀에 μžˆλ‹€.

1. Interface

  • 객체 λ˜λŠ” 클래슀 같은 κ΅¬μ‘°ν™”λœ νƒ€μž…μ„ μ •μ˜ν•  λ•Œ μœ μš©ν•˜λ‹€.

2. Type alias

  • μœ μ—°ν•œ νƒ€μž… μ •μ˜ 제곡 (Union, intersection, tuple λ“±)

/* interfaceλŠ” μ΄λŸ¬ν•œ λ°©λ²•μœΌλ‘œ 직접 νƒ€μž… μ—°μ‚°μž μ‚¬μš©μ΄ λΆˆκ°€λŠ₯ */
type Color = 'white' | 'blue' | 'red';

/* 객체, 클래슀 ꡬ쑰 νƒ€μž… μ •μ˜μ— 유용 */
interface Info {
  id: number;
  name: string;
}

2-2 νƒ€μž…μΆ”λ‘  (Type Inference)

λ³€μˆ˜λ“±μ— νƒ€μž…μ„ λ”°λ‘œ μ§€μ •ν•˜μ§€ μ•Šμ•„λ„ νƒ€μž…μŠ€ν¬λ¦½νŠΈκ°€ μ½”λ“œλ₯Ό 뢄석해 νƒ€μž…μ„ μΆ”λ‘ ν•˜λŠ” 과정을 의미

const temp = 10;
// λ³€μˆ˜ temp νƒ€μž…μ€ number둜 좔둠됨

Best Common Type

μ—¬λŸ¬ ν‘œν˜„μ‹μ˜ νƒ€μž…μ„ λΉ„κ΅ν•˜μ—¬ κ°€μž₯ κ·Όμ ‘ν•œ νƒ€μž…μ„ μ„ νƒν•˜λŠ” κ·œμΉ™

const foo = [1, null]
  • νƒ€μž…μ„ λͺ…μ‹œμ μœΌλ‘œ μ§€μ •ν•˜μ§€ μ•Šμ•˜μ§€λ§Œ Best Common Type κ·œμΉ™μ„ 톡해 (number | null)[] νƒ€μž…μœΌλ‘œ μΆ”λ‘ λœλ‹€.

2-3 Union Type vs Intersection Type

μ—°μ‚°μžλ₯Ό μ΄μš©ν•΄ νƒ€μž…μ„ μ •μ˜ν•˜λŠ” 방법

1. Union Type

OR μ—°μ‚°μž(||) 처럼 'Aμ΄κ±°λ‚˜ B이닀'λ₯Ό μ •μ˜ν•˜λŠ” νƒ€μž…

type Types = string | number;
let foo: Types;
foo = "Hello"; // λ¬Έμžμ—΄ ν• λ‹Ή κ°€λŠ₯
foo = 123; // 숫자 ν• λ‹Ή κ°€λŠ₯

2. Intersection Type

ν•©μ§‘ν•©μ²˜λŸΌ μ—¬λŸ¬κ°œμ˜ νƒ€μž…μ„ λͺ¨λ‘ λ§Œμ‘±ν•˜λ„λ‘ ν•˜λ‚˜λ‘œ ν•©μΉ  수 μžˆλ‹€.

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

interface Job {
  name: string;
  job: string;
}

type Manager = Person & Job;

// κ²°κ³Ό
{
  name: string;
  age: number;
  job: string
}

2-4 Optional Parameter

ν•¨μˆ˜ 호좜 μ‹œ λ§€κ°œλ³€μˆ˜, μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ‚¬μš©ν•  λ•Œ μ •μ˜ 된 속성을 μƒλž΅ ν•  수 μžˆλ‹€. λ˜ν•œ μ •μ˜λ˜μ–΄ μžˆμ§€ μ•Šμ€ 속성에 λŒ€ν•΄ 인지할 수 μžˆλ‹€.

function foo(x: number, y?: number) {
  console.log(`x: ${x}, y: ${y}`);
}

foo(10) // x: 10, y: undefined (λ§€κ°œλ³€μˆ˜ y μƒλž΅κ°€λŠ₯)

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

const bar = {
  name: 'dongdong',
  age: 30,
};

console.log(bar.oo); // 였λ₯˜

μΆ”κ°€ ν‚€μ›Œλ“œ 정리

  • d.ts(declaration)

    νƒ€μž…μŠ€ν¬λ¦½νŠΈ μ½”λ“œμ˜ νƒ€μž… 좔둠을 λ•λŠ” TS μ„ μ–Έ 파일

  • μœ ν‹Έλ¦¬ν‹° νƒ€μž…

    Partial, Pick, Omit λ“± 기쑴에 μ •μ˜λœ νƒ€μž…μ„ κ°€μ§€κ³  μž¬μ •μ˜ ν• λ•Œ 유용

  • μ œλ„ˆλ¦­

    νƒ€μž…μ„ 마치 ν•¨μˆ˜μ˜ νŒŒλΌλ―Έν„°μ²˜λŸΌ μ‚¬μš©ν•  수 μžˆλ‹€.

Last updated