Breaking Programming TypeScript - kskim7714/learn_typescript GitHub Wiki

Programming TypeScript: Making your applications scale

6μž₯ κ³ κΈ‰ νƒ€μž…

6.1.4 νƒ€μž… λ„“νžˆκΈ° (Type Widening)

  • νƒ€μž… μΆ”λ‘  κ°œλ…μ„ μ΄ν•΄ν•˜λ €λ©΄ κΌ­ μˆ™μ§€.
  • νƒ€μž…μ„ (정밀이 μ•„λ‹Œ) 일반적으둜 μΆ”λ‘  함.
  • let/var은 λ¦¬ν„°λŸ΄ 값이 λ¦¬ν„°λŸ΄μ΄ μ†ν•œ κΈ°λ³Έ νƒ€μž…μœΌλ‘œ λ„“ν˜€μ§.
let a = 'x' // string
const d = { x: 3 } // {x: numbr}
enum E {X, Y, Z}
let e = E.X // E
  • const둜 ν• λ•Œ νƒ€μž…μ΄ μ–΄λ–»κ²Œ 될까?
const a = 'x'    // 'x'

enum E {X, Y, Z}
const e = E.X    // E.X
  • νƒ€μž…μ„ λͺ…μ‹œν•˜λ©΄ νƒ€μž…μ΄ 넓어지지 μ•ŠμŒ.
let a: 'x' = 'x'         // 'x'
const d: {x: 3} = {x: 3} // {x: 3}
  • νƒ€μž… μ„ μ–Έ 없이 ν• λ‹Ή, const에 ν• λ‹Ή 후에 let/var둜 μž¬ν• λ‹Ήν•˜λ©΄ νƒ€μž…μ΄ 넓어짐.
const a = 'x'  // 'x'
let b = a      // string
  • νƒ€μž… μ„ μ–Έ 포함 ν• λ‹Ή, const에 ν• λ‹Ή 후에도 let/var둜 해도 νƒ€μž…μ΄ 넓어지지 μ•ŠμŒ.
const c:'x' = 'x' // 'x'
let d = c         // 'x'
  • null/undefined둜 μ΄ˆκΈ°ν™”ν•˜λ©΄ any νƒ€μž…μœΌλ‘œ 넓어짐.
let a = null  // any
a = 3         // any
a = 'b'       // any
  • null/undefined둜 μ΄ˆκΈ°ν™”λœ λ³€μˆ˜κ°€ μ„ μ–Έ λ²”μœ„λ₯Ό λ²—μ–΄λ‚˜λ©΄ 쒁은 νƒ€μž…μœΌλ‘œ λ³€ν™˜λ¨.
function x() {
  let a = null   // any
  a = 3          // any
  a = 'b'        // any
  return a
}
// client calls
x()              // string

const νƒ€μž…

초과 ν”„λ‘œνΌν‹° νƒ€μž…

6.1.5 μ •μ œ

μ°¨λ³„ν™”λœ μœ λ‹ˆμ˜¨ νƒ€μž…

6.1.6 μ’…ν•©μ„± (totality λ˜λŠ” μ² μ € 검사 exhaustiveness checking)

6.3 κ³ κΈ‰ 객체 νƒ€μž…

6.3.1 객체 νƒ€μž…μ˜ νƒ€μž… μ—°μ‚°μž (&, |)

킀인 (key in) μ—°μ‚°μž: JSON 일뢀뢄을 νƒ€μž…μœΌλ‘œ ν• λ‹Ή

keyof μ—°μ‚°μž: λͺ¨λ“  ν‚€λ₯Ό λ°°μ—΄λ‘œ μ–»κΈ°

6.3.2 Record νƒ€μž…

6.3.3 λ§€ν•‘λœ νƒ€μž…

λ‚΄μž₯ λ§€ν•‘λœ νƒ€μž…

6.3.4 μ»΄νŒ¨λ‹ˆμ–Έ 객체 νŒ¨ν„΄

6.4 κ³ κΈ‰ ν•¨μˆ˜ νƒ€μž…λ“€

6.4.1 νŠœν”Œμ˜ νƒ€μž… μΆ”λ‘  κ°œμ„ 

6.4.2 μ‚¬μš©μž μ •μ˜ νƒ€μž… μ•ˆμ „ μž₯치

6.5 쑰건뢀 νƒ€μž…

6.5.1 뢄배적 쑰건뢀

6.5.2 infer ν‚€μ›Œλ“œ

6.5.3 λ‚΄μž₯ 쑰건뢀 νƒ€μž…λ“€

6.6 νƒˆμΆœκ΅¬