LearningTS Chapter 3 - YDP-SPLOUNGE-CLUB/typescript-study GitHub Wiki

3. μœ λ‹ˆμ–Έκ³Ό λ¦¬ν„°λŸ΄

νƒ€μž…μŠ€ν¬λ¦½νŠΈκ°€ ν•΄λ‹Ή 값을 λ°”νƒ•μœΌλ‘œ 좔둠을 μˆ˜ν–‰ν•˜λŠ” 두 κ°€μ§€ 핡심 κ°œλ…μ„ μ†Œκ°œν•œλ‹€.

  1. μœ λ‹ˆμ–Έ: 값에 ν—ˆμš©λœ νƒ€μž…μ„ 두 개 μ΄μƒμ˜ κ°€λŠ₯ν•œ νƒ€μž…μœΌλ‘œ ν™•μž₯ν•˜λŠ” 것
  2. λ‚΄λ‘œμž‰: 값에 ν—ˆμš©λœ νƒ€μž…μ΄ ν•˜λ‚˜ μ΄μƒμ˜ κ°€λŠ₯ν•œ νƒ€μž…μ΄ λ˜μ§€ μ•Šλ„λ‘ μ’νžˆλŠ” 것

3.1 μœ λ‹ˆμ–Έ νƒ€μž…

μœ λ‹ˆμ–Έ νƒ€μž…μœΌλ‘œ μ •μ˜λœ μ—¬λŸ¬ νƒ€μž… 쀑 ν•˜λ‚˜μ˜ νƒ€μž…μœΌλ‘œ 된 κ°’μ˜ 속성을 μ‚¬μš©ν•˜λ €λ©΄ μ½”λ“œμ—μ„œ 값이 보닀 ꡬ체적인 νƒ€μž…μ€‘ ν•˜λ‚˜λΌλŠ” 것을 νƒ€μž…μŠ€ν¬λ¦½νŠΈμ—κ²Œ μ•Œλ €μ•Ό ν•œλ‹€. 이 과정을 λ‚΄λ‘œμž‰ 이라 ν•œλ‹€.

3.2 λ‚΄λ‘œμž‰

λ‚΄λ‘œμž‰μ€ 값이 μ •μ˜ μ„ μ–Έ ν˜Ήμ€ 이전에 μœ μΈ„λœ 것보닀 ꡬ체적인 νƒ€μž…μž„μ„ μ½”λ“œμ—μ„œ μœ μΆ”ν•˜λŠ” 것이닀.

νƒ€μž…μ„ μ’νžˆλŠ” 데 μ‚¬μš©ν•  수 μžˆλŠ” 논리적 검사λ₯Ό νƒ€μž… κ°€λ“œ 라고 ν•œλ‹€.

TSκ°€ μ½”λ“œμ—μ„œ νƒ€μž…μ„ μ’νžˆλŠ” 데 ν”νžˆ μ‚¬μš©ν•˜λŠ” νƒ€μž… κ°€λ“œ 두 κ°€μ§€λ₯Ό μ‚΄νŽ΄λ³΄μž.

3.2.1 κ°’ 할당을 ν†΅ν•œ λ‚΄λ‘œμž‰

λ³€μˆ˜μ— 값을 직접 ν• λ‹Ήν•˜λ©΄ νƒ€μž…μŠ€ν¬λ¦½νŠΈλŠ” λ³€μˆ˜μ˜ νƒ€μž…μ„ ν• λ‹Ήλœ κ°’μ˜ νƒ€μž…μœΌλ‘œ μ’νžŒλ‹€.

let admiral: number | string;

admiral = "String";

admiral.toUpperCase(); // OK

admiral.toFixed(); // Error toFixed does not exist on type string

3.2.2 쑰건 검사λ₯Ό ν†΅ν•œ λ‚΄λ‘œμž‰

let scientist = Math.random() > 0.5 ? "Rosalin Franlin" : 51;

if (scientist === "Rosalin Franlin") {
    scientist.toUpperCase(); // OK
}

scientist.toUpperCase(); // Error does not exist on type string | number

3.2.3 typeof 검사λ₯Ό ν†΅ν•œ λ‚΄λ‘œμž‰


3.3 λ¦¬ν„°λŸ΄ νƒ€μž…

λ¦¬ν„°λŸ΄ νƒ€μž…μ€ μ’€ 더 ꡬ체적인 λ²„μ „μ˜ μ›μ‹œ νƒ€μž…μ΄λ‹€.

const philsopher = "Hypatia";

philsopherλŠ” μ–΄λ–€ νƒ€μž…μΈκ°€? 얼핏 보면 string νƒ€μž…μ΄λΌκ³  말할 수 있고 μ‹€μ œλ‘œλ„ string νƒ€μž…μ΄λ‹€.

philsopher λŠ” 단지 string νƒ€μž…μ΄ μ•„λ‹Œ Hypatia λΌλŠ” νŠΉλ³„ν•œ 값이닀. philsopher 의 νƒ€μž…μ€κΈ°μˆ μ μœΌλ‘œ 더 ꡬ체적인 Hypatia λ‹€.

μ›μ‹œ νƒ€μž… κ°’ 쀑 μ–΄λ–€ 것이 μ•„λ‹Œ νŠΉμ • μ›μ‹―κ°’μœΌλ‘œ μ•Œλ €μ§„ νƒ€μž…μ΄ λ¦¬ν„°λŸ΄ νƒ€μž…μ΄λ‹€. μ›μ‹œ νƒ€μž… string 은 μ‘΄μž¬ν•  수 μžˆλŠ” λͺ¨λ“  κ°€λŠ₯ν•œ λ¬Έμžμ—΄μ˜ 집합을 λ‚˜νƒ€λ‚΄μ§€λ§Œ λ¦¬ν„°λŸ΄ νƒ€μž…μΈ Hypatia λŠ” ν•˜λ‚˜μ˜ λ¬Έμžμ—΄λ§Œ λ‚˜νƒ€λ‚Έλ‹€.

3.3.1 λ¦¬ν„°λŸ΄ ν• λ‹Ή κ°€λŠ₯μ„±

μ•žμ„œ number 와 string κ³Ό 같은 μ„œλ‘œ λ‹€λ₯Έ μ›μ‹œ νƒ€μž…μ΄ μ„œλ‘œ ν• λ‹Ήλ˜μ§€ λͺ»ν•œλ‹€λŠ” 것을 λ³΄μ•˜λ‹€. λ§ˆμ°¬κ°€μ§€λ‘œ 0κ³Ό 1처럼 λ™μΌν•œ μ›μ‹œ νƒ€μž…μΌμ§€λΌλ„ μ„œλ‘œ λ‹€λ₯Έ λ¦¬ν„°λŸ΄ νƒ€μž…μ€ μ„œλ‘œ ν• λ‹Ήν•  수 μ—†λ‹€.

3.4 μ—„κ²©ν•œ null 검사

λ¦¬ν„°λŸ΄λ‘œ μ’ν˜€μ§„ μœ λ‹ˆμ–Έμ˜ νž˜μ€ νƒ€μž…μŠ€ν¬λ¦½νŠΈμ—μ„œ μ—„κ²©ν•œ null 검사라 λΆ€λ₯΄λŠ” νƒ€μž… μ‹œμŠ€ν…œ μ˜μ—­μΈ 잠재적으둜 μ •μ˜λ˜μ§€ μ•Šμ€ undefined κ°’ 으둜 μž‘μ—…ν•  λ•Œ λ‘λ“œλŸ¬μ§„λ‹€.

3.4.1 μ‹­μ–΅ λ‹¬λŸ¬μ˜ μ‹€μˆ˜

μ‹­μ–΅ λ‹¬λŸ¬μ˜ μ‹€μˆ˜λŠ” λ‹€λ₯Έ νƒ€μž…μ΄ ν•„μš”ν•œ μœ„μΉ˜μ—μ„œ null 값을 μ‚¬μš©ν•˜λ„λ‘ ν—ˆμš©ν•˜λŠ” λ§Žμ€ νƒ€μž… μ‹œμŠ€ν…œμ„ κ°€λ¦¬ν‚€λŠ” 업계 μš©μ–΄

νƒ€μž…μŠ€ν¬λ¦½νŠΈ 컴파일러 μ˜΅μ…˜μ— strictNullChecks λŠ” μ—„κ²©ν•œ null 검사λ₯Ό ν™œμ„±ν™”ν• μ§€ μ—¬λΆ€λ₯Ό κ²°μ •ν•œλ‹€.

strickNullChecks λ₯Ό λΉ„ν™œμ„±ν•˜λ©΄ μ½”λ“œμ˜ λͺ¨λ“  νƒ€μž…μ— null | undefined λ₯Ό μΆ”κ°€ν•΄μ—¬ λͺ¨λ“  λ³€μˆ˜κ°€ null λ˜λŠ” undefined λ₯Ό ν• λ‹Ήκ°€λŠ₯ν•˜λ‹€.

3.4.2 μ°Έ 검사λ₯Ό ν†΅ν•œ λ‚΄λ‘œμž‰

if (true) {
    // ...
}

3.4.3 μ΄ˆκΈ°κ°’μ΄ μ—†λŠ” λ³€μˆ˜

νƒ€μž…μŠ€ν¬λ¦½νŠΈλŠ” 값이 할당될 λ•ŒκΉŒμ§€ λ³€μˆ˜κ°€ undefined μž„μ„ 이해할 만큼 μΆ©λΆ„νžˆ μ˜λ¦¬ν•˜λ‹€.

값이 ν• λ‹Ήλ˜κΈ° 전에 속성 쀑 ν•˜λ‚˜μ— μ ‘κ·Όν•˜λ €λŠ” κ²ƒμ²˜λŸΌ ν•΄λ‹Ή λ³€μˆ˜λ₯Ό μ‚¬μš©ν•˜λ €κ³  μ‹œλ„ν•˜λ©΄ λ‹€μŒκ³Ό 같은 였λ₯˜ λ©”μ„Έμ§€κ°€ λ‚˜νƒ€λ‚œλ‹€.

let math: string;

math?.length; // Error variable math is used before being assigned;

math = "Mark";
math.length; // OK

λ³€μˆ˜ νƒ€μž…μ— undefined κ°€ ν¬ν•¨λ˜μ–΄ μžˆλŠ” κ²½μš°μ—λŠ” 였λ₯˜κ°€ λ³΄κ³ λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λ³€μˆ˜ νƒ€μž…μ— | undefined λ₯Ό μΆ”κ°€ν•˜λ©΄ μœ νš¨ν•œ νƒ€μž…μ΄κΈ° λ•Œλ¬Έμ— μ‚¬μš© μ „μ—λŠ” μ •μ˜ν•  ν•„μš”κ°€ μ—†μŒμ„ νƒ€μž…μŠ€ν¬λ¦½νŠΈκ°€ λ‚˜νƒ€λ‚Έλ‹€.

이전 μ½”λ“œ μŠ€λ‹ˆνŽ«μ—μ„œ string | undefined 라고 μ„ μ–Έν•˜λ©΄ 였λ₯˜κ°€ λ°œμƒν•˜μ§€ μ•ŠλŠ”λ‹€.

3.5 νƒ€μž… 별칭