πŸ₯ŠΒ νƒ€μž… 단언

νƒ€μž…μŠ€ν¬λ¦½νŠΈ μ»΄νŒŒμΌλŸ¬λŠ” νƒ€μž… ν‘œκΈ°, νƒ€μž… μ’νžˆκΈ°μ™€ νƒ€μž… μΆ”λ‘  λ“±μ˜ 기법을 μ΄μš©ν•΄ κ°’μ˜ νƒ€μž…μ„ νŒλ‹¨ν•œλ‹€. ν•˜μ§€λ§Œ λ•Œλ‘œλŠ” μ»΄νŒŒμΌλŸ¬κ°€ 가진 정보λ₯Ό λ¬΄μ‹œν•˜κ³  ν”„λ‘œκ·Έλž˜λ¨Έκ°€ μ›ν•˜λŠ” μž„μ˜μ˜ νƒ€μž…μ„ 값에 ν• λ‹Ήν•˜κ³  싢을 수 μžˆλ‹€. 이럴 λ•Œ ν•„μš”ν•œ 것이 λ°”λ‘œ νƒ€μž… 단언 (type assertion)이닀.

즉 νƒ€μž…μŠ€ν¬λ¦½νŠΈ 보닀 λ‚΄κ°€ 더 νƒ€μž…μ„ 잘 μ•Œκ³  μžˆλ‹€! 라고 ν•˜λŠ” 것

ν‚€μ›Œλ“œλŠ” as 이닀.

κΈ°λ³Έ μ‚¬μš© 예제

let a; // let a:any

a = 10;
b = 'abc'

let b = a // let b:any;

let b = a as string;

ν™œμš©

DOM API μ‘°μž‘

let div = document.querySelector('div')// let div: HTMLDivElement | null

div.innerText;
//~~~ null μ—λŠ” innerText λΌλŠ” ν•¨μˆ˜κ°€ μ—†μ–΄μš”!
let div = document.querySelector('div') as HTMLDivElement // let div: HTMLDivElement

div.innerText;

β†’ νƒ€μž… 단언은 돔 μ‘°μž‘ μ΄λ‚˜ ν•„νžˆ ν•„μš”ν•œ 경우λ₯Ό μ œμ™Έν•˜κ³ λŠ” μ‚¬μš©μ„ μ΅œλŒ€ν•œ 적게 ν•˜λŠ”κ²Œ μ’‹λ‹€.

νƒ€μž… μΊμŠ€νŒ…(<Type>) vs νƒ€μž… 단언(as)

νƒ€μž… μΊμŠ€νŒ… νƒ€μž… 단언
μ‚¬μš© 예제 (<Dog>character).bark(); (character as Dog).bark();
컴파일 νƒ€μž„μ— 영ν–₯ O O
λŸ°νƒ€μž„μ— 영ν–₯ O X

β†’ νƒ€μž… 단언을 "νƒ€μž… μΊμŠ€νŒ…(type casting)"이라 λΆ€λ₯΄μ§€ μ•ŠλŠ” μ΄μœ λŠ” 일반적으둜 μΊμŠ€νŒ… μ΄λž€ 말은 μ‹€ν–‰ μ‹œκ°„μ— μ–΄λ–€ λ™μž‘μ΄ 일어날 κ²ƒμž„μ„ λ‚΄ν¬ν•˜κΈ° λ•Œλ¬Έμž…λ‹ˆλ‹€. ν•˜μ§€λ§Œ "νƒ€μž… 단언(type assertions)"은 μˆœμˆ˜ν•˜κ²Œ 컴파일 μ‹œκ°„ ꡬ성물이고 λ‹Ήμ‹ μ˜ μ½”λ“œκ°€ μ–΄λ–€ μ‹μœΌλ‘œ λΆ„μ„λ˜κΈΈ μ›ν•˜λŠ”μ§€ μ»΄νŒŒμΌλŸ¬μ—κ²Œ 힌트λ₯Ό μ œκ³΅ν•˜λŠ” μˆ˜λ‹¨μž…λ‹ˆλ‹€.

β†’ νƒ€μž… μΊμŠ€νŒ… λ³΄λ‹€λŠ” νƒ€μž… 단언을 μ‚¬μš©ν•˜λŠ” 편이 λ‚˜μ„ 수 μžˆμŠ΅λ‹ˆλ‹€.(JSX λ₯Ό μ‚¬μš©ν•  경우 특히)