🎈 νƒ€μž… 단언 μ•Œμ•„λ³΄κΈ°

var a;

μ΄λ ‡κ²Œλ§Œ μ„ μ–Έν•œ a에 λŒ€ν•œ νƒ€μž…μ€ anyκ°€ 되고

a = 20;

μ΄λ ‡κ²Œ 숫자둜 λŒ€μž…ν•œ aλŠ” 숫자둜 좔둠이 λœλ‹€.

a = 'a';

μ–˜λŠ” λ¬Έμžμ—΄λ‘œ 좔둠이 λœλ‹€.

var b = a;

μ–˜λŠ” μ›λž˜κ°™μœΌλ©΄ 맨 μ²˜μŒμ— μ„ μ–Έλœ anyκ°€ b에 ν• λ‹Ήλœλ‹€.

var b = a as string;

μ΄λ ‡κ²Œ as ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•˜μ—¬ 후에 νƒ€μž…μ„ μ„ μ–Έν•˜λ©΄ μ„ μ–Έ ν•œ νƒ€μž…(string)으둜 μ§€μ •λœλ‹€. 이처럼 νƒ€μž… 단언은 νƒ€μž…μŠ€ν¬λ¦½νŠΈλ³΄λ‹€ κ°œλ°œμžκ°€ νƒ€μž…μ„ 더 잘 μ•Œκ³ μžˆλ‹€λΌλŠ” 의미둜 νƒ€μž…μŠ€ν¬λ¦½νŠΈ λ„ˆλŠ” μ‹ κ²½μ“°μ§€ 말고 λ‚΄κ°€ μ •ν•œ νƒ€μž…μ— κ°„μ£Όν•˜λΌ... μš”λŸ° λ„ˆλ‚ŒμœΌλ‘œ 받아듀이면 λœλ‹€.

 

🎈 DOM API μ‘°μž‘

<div id="app">hi</div>

var div = document.querySelector('div');

if (div) {
  div.innerText
}

μ›ΉνŽ˜μ΄μ§€μ— νƒœκ·Έλ₯Ό μ‘°μž‘ν•΄μ€„ λ•Œ κ°€μž₯ 많이 μ‚¬μš©ν•˜λŠ” APIλŠ” querySelector이닀. 그리고 μœ„ μ½”λ“œμ²˜λŸΌ DIVλΌλŠ” λ³€μˆ˜μ— λ‹΄μ•„ νƒœκ·Έμ— μ ‘κ·Όν•˜λ©΄ μ•Œμ•„μ„œ HTMLElement라고 μΆ”λ‘ ν•΄μ€€λ‹€. 그리고 if문으둜 divκ°€ μžˆλŠ”μ§€ 확인을 ν•˜κ³  κ·Έ λ‹€μŒμ— μ‘°μž‘μ„ ν•΄μ£ΌλŠ”κ²Œ 일반적인 νƒ€μž…λ‹¨μ–Έμ˜ νŒ¨ν„΄μ΄λ‹€. divλΌλŠ” 값이 null일 μˆ˜λ„ 있기 λ•Œλ¬Έμ— 밑에 호좜된 divκ°€ μ–΄λ–€ κ±Έ λ°λ €μ˜€λŠ”μ§€ divκ°€ μžˆλŠ”μ§€λ₯Ό if문을 톡해 ν™•μΈν•΄λ³΄λŠ” 것이닀.

 

κ·Έλž˜μ„œ μ΄λ•Œ,

var div = document.querySelector('div') as HTMLDivElement;
div.innerText;

μ΄λ ‡κ²Œ asλΌλŠ” ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•˜μ—¬ 미리 HTMLElement둜 νƒ€μž…μ„ λ‹¨μ–Έν•΄μ£ΌλŠ” 것이닀. asλ₯Ό μ“°λŠ” μ‹œμ μ—λŠ” μ½”λ“œκ°€ λŒμ•„κ°ˆ λ•Œ querySelectorκ°€ HTMLElement라고 단언해쀀닀. 

 

🎈 νƒ€μž… κ°€λ“œ μ•Œμ•„λ³΄κΈ°

interface Developer {
  name: string;
  skill: string;
}

interface Person {
  name: string;
  age: number;
}

function introduce(): Developer | Person {
  return { name: 'Tony', age: 33, skill: 'Iron Making'}
}

var Tony = introduce();
console.log(Tony.name);

if ((Tony as Developer).skill) {
  var skill = ((Tony as Developer).skill);
  console.log(skill);
} else if ((Tony as Person).age) {
  var age = (Tony as Person).age;
  console.log(age);
}

μΈν„°νŽ˜μ΄μŠ€ μ„ μ–Έν•΄μ£Όκ³ , introduceλΌλŠ” ν•¨μˆ˜μ— μœ λ‹ˆμ˜¨ νƒ€μž…μœΌλ‘œ μž‘μ„±ν•˜μ—¬ Tonyλ₯Ό ν˜ΈμΆœν•΄μ€¬λ‹€. 그리고 if문을 μ‚¬μš©ν•˜μ—¬ νƒ€μž… 단언 λ°©μ‹μœΌλ‘œ asλ₯Ό 써가며 νƒ€μž…μ΄ μžˆλ‚˜ μ—†λ‚˜ ν™•μΈν•˜λŠ” 과정이닀. 첫 μ€„μ—λŠ” Tony as Developerλ₯Ό μ‚¬μš©ν•˜μ—¬ λ””λ²¨λ‘œνΌμ—  skill이 μžˆλ‚˜ μ—†λ‚˜ 확인을 ν•œ 후에 있으면 또 skillμ΄λΌλŠ” 것을 ν˜ΈμΆœν•΄μ£Όλ„λ‘ λ³€μˆ˜μ— λ‹΄λŠ” 이 과정을 λ°˜λ³΅ν•΄μ„œ λ§Œλ“€μ—ˆλ‹€. μ΄λ ‡κ²Œ ν•˜λ©΄ 가독성도 λ–¨μ–΄μ§€κ³  μ—¬λŸ¬λ²ˆ μ„ μ–Έν•΄μ•Ό λœλ‹€λŠ” λΆˆνŽΈν•œ 점이 μžˆμ–΄ 이것을 λ³΄μ™„ν•œ 것이 νƒ€μž… κ°€λ“œμ΄λ‹€.

 

🎈 νƒ€μž… κ°€λ“œ μ •μ˜

function isDeveloper(target: Developer | Person): target is Developer {
  return (target as Developer).skill !== undefined;
}
if (isDeveloper(Tony)) {
  console.log(Tony.skill) 
} else {
  console.log(Tony.age) 

νƒ€μž…κ°€λ“œ ν•¨μˆ˜λŠ” isλΌλŠ” νŒ¨ν„΄κ³Ό targetμ΄λΌλŠ” ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•œλ‹€. 그리고 skillμ΄λΌλŠ” 값이 μžˆμ„ λ•Œ !== undefined ν•¨μˆ˜λ₯Ό μ‚¬μš©ν–ˆλ‹€. if문은 ν† λ‹ˆκ°€ Developer이면 μŠ€ν‚¬μ„ μ œκ³΅ν•΄μ€€λ‹€. κ·Έλ ‡μ§€ μ•ŠμœΌλ©΄ ν† λ‹ˆλŠ” Person으둜 μΈμ‹ν•˜μ—¬ ageλ₯Ό μ œκ³΅ν•΄μ€€λ‹€. ifλ¬Έ 첫 μ€„μ—λŠ” developerκ°€ ν† λ‹ˆμ΄κ³ , 밑에쀄은 PersonμœΌλ‘œμ„œμ˜ ν† λ‹ˆμ΄κΈ° λ•Œλ¬Έμ— 각각의 ν•„μš”ν•œ 속성을 μ ‘κ·Όν•  수 μžˆλ‹€.

 

+ Recent posts