2024-05-07.md

🏑

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

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


문제

  • κ°œλ… ν€΄μ¦ˆ
    • ꡐ재의 κ°œλ…μ„ κΈ°μ€€μœΌλ‘œ O/X, λ˜λŠ” n지선닀 ν€΄μ¦ˆ
  • λ³€ν˜• 예제
    • ꡐ재의 예제λ₯Ό μ°Έκ³ ν•˜μ—¬ λ³€ν˜•ν•œ 예제λ₯Ό λ§Œλ“ λ‹€.
  • λΈ”λž™λ°•μŠ€ ν€΄μ¦ˆ
    • ν…ŒμŠ€νŠΈ μΌ€μ΄μŠ€κ°€ μ‹€νŒ¨ν•œ 원인을 μ°ΎλŠ”λ‹€.

μ•„μ΄ν…œ 1

Quiz

  • νƒ€μž…μŠ€ν¬λ¦½νŠΈλŠ” μžλ°”μŠ€ν¬λ¦½νŠΈμ˜ Superset이닀. (O/X)
  • λͺ¨λ“  μžλ°”μŠ€ν¬λ¦½νŠΈ ν”„λ‘œκ·Έλž¨μ€ νƒ€μž…μŠ€ν¬λ¦½νŠΈ ν”„λ‘œκ·Έλž¨μ΄λ‹€. (O/X)
  • νƒ€μž…μŠ€ν¬λ¦½νŠΈλŠ” μžλ°”μŠ€ν¬λ¦½νŠΈμ˜ λŸ°νƒ€μž„ λ™μž‘μ„ λͺ¨λΈλ§ν•˜λŠ” νƒ€μž… μ‹œμŠ€ν…œμ„ 가지고 μžˆλ‹€. (O/X)

Example

const numbers = [1, 2, 3];
console.log(numbers[3].toFixed());
  • μœ„ μ½”λ“œμ—μ„œ μ–΄λ–€ 일이 λ°œμƒν•˜λ‚˜μš”?

  • a) λ°°μ—΄μ˜ 인덱슀 λ²”μœ„λ₯Ό μ΄ˆκ³Όν•˜μ—¬ μ ‘κ·Όν•˜λŠ” 였λ₯˜

  • b) undefined의 속성을 읽을 수 μ—†λŠ” 였λ₯˜

  • c) toFixed()에 μ •ν™•ν•œ νƒ€μž…μ˜ 인수λ₯Ό μ „λ‹¬ν•˜μ§€ μ•Šμ€ 였λ₯˜

  • d) 였λ₯˜ 없이 싀행됨

  • νƒ€μž… μ²΄μ»€λŠ” μ—λŸ¬λ₯Ό λ°œκ²¬ν•  수 μžˆλ‚˜μš”? (O/X)

interface Fruits {
  name: string;
  details: {
    info: {
      icon: string;
    };
  };
}

const fruits: Fruits[] = [
  { name: "Apple", details: { info: { icon: "🍎" } } },
  { name: "Orange", details: { info: { iocn: "🍊" } } }, // 1️⃣
  { name: "Grape", details: { info: { icon: "πŸ‡" } } },
  { name: "Cherry", details: null }, // 3️⃣
];

for (const fruit of fruits) {
  console.log(fruit.details.icon); // 2️⃣
}
  • μœ„ μ½”λ“œμ—μ„œ λ°œμƒν•˜λŠ” 3가지 였λ₯˜μ™€, λ°œμƒ μœ„μΉ˜λŠ”?
    • a) Type 'null' is not assignable to type '{ info: { icon: string; }; }'.
    • b) Property 'icon' does not exist on type ...
    • c) Type '{ iocn: string; }' is not assignable to type '{ icon: string; }'.Object literal may only specify known properties, and 'iocn' does not exist in type '{ icon: string; }'.
    • d) 'fruit.details' is possibly 'undefined'.

Blackbox

/**
 * - 였λ₯˜κ°€ λ°œμƒν• κΉŒμš”?
 * - μ–΄λ–€ μœ„μΉ˜μ—μ„œ λ°œμƒν• κΉŒμš”?
 * - μ΄μœ λŠ” λ¬΄μ—‡μΈκ°€μš”?
 * */
// Question A
function processDataA(input) {
  return input / 2;
}
console.log(processDataA("10"));

// Question B
function processDataB(input: number) {
  return input / 2;
}
console.log(processDataB("10"));

// Question C
function processDataC(input: number) {
  return input / 2;
}
console.log(processDataC("10" as any));

μ•„μ΄ν…œ 2

Quiz

  • tsconfig.json을 μ‚¬μš©ν•˜λŠ” 것이 쒋은 이유둜 더 μ μ ˆν•œ 것은?
    • a) νƒ€μž…μŠ€ν¬λ¦½νŠΈ μ½”λ“œμ˜ 문제λ₯Ό 더 μ‰½κ²Œ λ°œκ²¬ν•  수 있기 λ•Œλ¬Έ
    • b) λ‹€λ₯Έ λ„κ΅¬μ™€μ˜ ν˜Έν™˜μ„±μ„ 보μž₯ν•˜κΈ° μœ„ν•΄μ„œ
  • noImplicitAny 섀정을 true둜 μ„€μ •ν•˜λŠ” κ²½μš°μ— λŒ€ν•œ μ„€λͺ…μœΌλ‘œ μ˜³μ€ 것은?
    • a) νƒ€μž…μŠ€ν¬λ¦½νŠΈ μ»΄νŒŒμΌλŸ¬λŠ” λͺ¨λ“  ν•¨μˆ˜μ˜ λ§€κ°œλ³€μˆ˜μ— λŒ€ν•œ νƒ€μž…μ„ λͺ…μ‹œν•˜μ§€ μ•ŠμœΌλ©΄ κ²½κ³ λ₯Ό λ°œμƒμ‹œν‚΅λ‹ˆλ‹€.
    • b) νƒ€μž… λͺ…μ‹œλ₯Ό ν•˜μ§€ μ•Šμ€ 경우 μ½”λ“œλŠ” μ»΄νŒŒμΌλ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.
    • c) κ°œλ°œμžκ°€ 생산성을 ν–₯μƒμ‹œν‚€κΈ° μœ„ν•΄ false둜 μ„€μ •ν•˜λŠ” 것이 μΌλ°˜μ μž…λ‹ˆλ‹€.- d) λͺ¨λ“  ν•­λͺ©μ΄ μ˜³μ€ λ‹΅
  • strictNullChecks 섀정을 true둜 μ„€μ •ν•˜λŠ” μ΄μœ λŠ” 'undefinedλŠ” 객체가 μ•„λ‹™λ‹ˆλ‹€'와 같은 λŸ°νƒ€μž„ 였λ₯˜λ₯Ό λ°©μ§€ν•˜κΈ° μœ„ν•΄μ„œμ΄λ‹€. (O/X)