2024-05-09.md

🏑

DIL: μ΄νŽ™ν‹°λΈŒ νƒ€μž…μŠ€ν¬λ¦½νŠΈ

μŠ€ν„°λ””: μ›”κ°„ CS, https://github.com/monthly-cs/2024-05-effective-typescript
μž‘μ„±μΌ: 2024-05-09
μž‘μ„±μž: dusunax


μ•„μ΄ν…œ 3

μ˜€λ²„λ‘œλ“œ

  • μ‹ κΈ°ν•œ ν•¨μˆ˜ μ˜€λ²„λ‘œλ”©
// tsConfig: {"noImplicitAny":false}

function format(input: number): string; // 숫자 ν˜•μ‹
function format(input: string): string; // λ¬Έμžμ—΄ ν˜•μ‹

function format(input: any): string {
  if (typeof input === "number") {
    return `Number: ${input}`;
  } else if (typeof input === "string") {
    return `String: ${input}`;
  } else {
    throw new Error("Unsupported type");
  }
}

const formattedNumber = format(42); // "Number: 42"
const formattedString = format("Hello"); // "String: Hello"

μ•„μ΄ν…œ 4

  • ꡬ쑰적 타이핑!! 덕 타이핑! πŸ¦†
    • νƒ€μž… 체컀의 νƒ€μž…μ— λŒ€ν•œ 이해도가 μ‚¬λžŒκ³Ό λ‹€λ₯΄λ‹€

ꡬ쑰적 타이핑 문제 μ˜ˆμ‹œ: 개발자의 μ˜λ„μ™€ λ‹€λ₯΄κ²Œ, μ•„λž˜ μ½”λ“œμ—μ„œ μ—λŸ¬κ°€ λ°œμƒν•˜μ§€ μ•ŠμŒ

type 맛_단계 = 1 | 2 | 3 | 4 | 5;

// λ§ˆλΌνƒ•κ³Ό 탕후루λ₯Ό μ •μ˜ν•˜λŠ” μΈν„°νŽ˜μ΄μŠ€
interface 탕후루 {
  재료: string[];
  단맛: 맛_단계;
}

function λ§ˆλΌνƒ•λ§Œλ“€κΈ°(λ§ˆλΌνƒ•: 탕후루) {
  console.log("재료둜 λ§ˆλΌνƒ• λ§Œλ“€κΈ°:", λ§ˆλΌνƒ•.재료);
  // λ§ˆλΌνƒ• λ§Œλ“œλŠ” 둜직
}

function νƒ•ν›„λ£¨λ§Œλ“€κΈ°(탕후루: 탕후루) {
  console.log("재료둜 탕후루 λ§Œλ“€κΈ°:", 탕후루.재료);
  // 탕후루 λ§Œλ“œλŠ” 둜직
}

// λ§ˆλΌνƒ• μž¬λ£Œμ™€ 맀운 정도
const λ§ˆλΌνƒ•μž¬λ£Œ = ["μ†Œκ³ κΈ°", "두뢀", "버섯"];
const λ§ˆλΌνƒ•μš”λ¦¬ = {
  재료: λ§ˆλΌνƒ•μž¬λ£Œ,
  λ§€μš΄λ§›: 5,
  얼얼맛: 5,
  단맛: 1 as 맛_단계,
};

// 탕후루 μž¬λ£Œμ™€ 맀운 정도
const νƒ•ν›„λ£¨μž¬λ£Œ = ["λ”ΈκΈ°", "μƒ€μΈλ¨ΈμŠ€μΊ£", "돼지고기"];
const νƒ•ν›„λ£¨μš”λ¦¬: 탕후루 = {
  재료: νƒ•ν›„λ£¨μž¬λ£Œ,
  단맛: 5,
};

// λ§ˆλΌνƒ•κ³Ό 탕후루 λ§Œλ“€κΈ°
λ§ˆλΌνƒ•λ§Œλ“€κΈ°(λ§ˆλΌνƒ•μš”λ¦¬);
νƒ•ν›„λ£¨λ§Œλ“€κΈ°(νƒ•ν›„λ£¨μš”λ¦¬);