🚨 Object is possibly β€˜null’.ts(2531)

🚨 Object is possibly β€˜null’.ts(2531)

tsconfigνŒŒμΌμ—μ„œ μ•ˆμ „ν•œ μ½”λ“œ 가동을 μœ„ν•΄ strict을 true둜 μ„€μ •ν–ˆλ”λ‹ˆ μ—¬λŸ¬κ°€μ§€ μ—λŸ¬κ°€ λ°œμƒν–ˆμŠ΅λ‹ˆλ‹€.

...
    deathsList.appendChild(li);
...

이 μ½”λ“œμ˜ μ—λŸ¬λ©”μ„Έμ§€λŠ” λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

const deathsList: Element | null;
// 🚨 Object is possibly 'null'.ts(2531)

deathsList의 νƒ€μž…μ΄ Element ν˜Ήμ€ null이 될 수 μžˆλŠ”λ° ν™•μ‹€ν•˜κ²Œ ν•΄λ‹¬λΌλŠ” λœ»μž…λ‹ˆλ‹€.

μ• μ΄ˆμ— deathListλ₯Ό μ„ μ–Έν• λ•Œ νƒ€μž…λ‹¨μ–Έμ„ ν™•μ‹€νžˆ ν•΄μ£Όλ©΄ λ˜λŠ” μΌμ΄μ§€λ§Œ 이 외에도 λ‹€μ–‘ν•œ ν•΄κ²° 방법이 μžˆμŠ΅λ‹ˆλ‹€.

πŸ”¨ ν•΄κ²° 방법

1. ifλ¬Έ μ‚¬μš©

μ½”λ“œμ˜ λ°”λ‘œ μœ—μ€„μ— if문을 μ‚¬μš©ν•˜μ—¬ null일 경우 returnν•©λ‹ˆλ‹€.

if (!deathList) {
  return;
}
deathsList.appendChild(li);

deathListhκ°€ null이 되면 returnλ˜μ–΄ 버리기 λ•Œλ¬Έμ— ν•΄λ‹Ή μ½”λ“œκΉŒμ§€ λ‚΄λ €κ°€μ§€ μ•Šκ³  μ—λŸ¬κ°€ λ°œμƒν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

ν•˜μ§€λ§Œ μ΄λ ‡κ²Œ λͺ¨λ“  ν•΄λ‹Ή μ—λŸ¬ μ½”λ“œλ₯Ό if문으둜 μž‘μ„±ν•˜λ©΄ μ½”λ“œκ°€ κΈΈμ–΄μ Έ νš¨μœ¨μ„±μ΄ λ–¨μ–΄μ§ˆ 수 μžˆμŠ΅λ‹ˆλ‹€.

2. assertion μ‚¬μš©(νƒ€μž… 단언)

deathsList!.appendChild(li);

assertion 기호 !λ₯Ό μ‚¬μš©ν•˜λ©΄ ν•΄λ‹Ή 데이터가 null이 μ•„λ‹ˆλΌκ³  νƒ€μž…μŠ€ν¬λ¦½νŠΈμ— μ•Œλ €μ£Όκ²Œ λ©λ‹ˆλ‹€.

ν•˜μ§€λ§Œ assertion을 μ‚¬μš©ν•΄μ„œ νƒ€μž… 단언을 ν•˜κ²Œ 되면 esLintμ—μ„œ μœ„ν—˜ν•˜λ‹€κ³  κ²½κ³ λ₯Ό μ€λ‹ˆλ‹€.

πŸ“Œ νƒ€μž… 단언 문법 μ‚¬μš©μ‹œ μ£Όμ˜ν•΄μ•Ό ν•  점

νƒ€μž… 단언을 μ‚¬μš©ν•˜λ©΄ μ£Όμ˜ν•΄μ•Όν•  점이 μžˆμŠ΅λ‹ˆλ‹€.

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

const capt = {} as Hero;

// capt.name = 'capt';

νƒ€μž… 단언을 μ‚¬μš©ν•˜λ©΄ μΈν„°νŽ˜μ΄μŠ€μ˜ 속성 값을 μ‚¬μš©ν•˜μ§€ μ•Šμ•„λ„ μ—λŸ¬κ°€ λ‚˜μ§€ μ•ŠλŠ” μœ„ν—˜μ„±μ„ κ°€μ§€κ³  μžˆμŠ΅λ‹ˆλ‹€.

λ”°λΌμ„œ νƒ€μž… 단언은 확신이 μžˆμ„ κ²½μš°μ—λ§Œ μ‚¬μš©ν•˜λŠ” 것을 ꢌμž₯ν•œλ‹€.

3. μ˜΅μ…”λ„ 체이닝 μ—°μ‚°μž μ‚¬μš©ν•˜κΈ°

μ˜΅μ…”λ„ 체이닝 문법을 μ‚¬μš©ν•˜λ©΄ ?기호둜 κ°„λ‹¨νžˆ μ—λŸ¬λ₯Ό μž‘μ„ 수 μžˆμŠ΅λ‹ˆλ‹€.

...
    deathsList?.appendChild(li);
...

deathListκ°€ null μ΄λ‚˜ undefinedλ©΄ 평가λ₯Ό λ©ˆμΆ”κ³  undefinedλ₯Ό λ°˜ν™˜ν•œλ‹€.

좜처

Leave a comment