μ°μ ..
{
"compilerOptions": {
...
"strictNullChecks": true,
...
},
}
tsconfig.json νμΌμμ strictNullCheck μ΅μ μ trueλ‘ λ°κΎΌλ€. (νΉμ "strict" : trueλ‘ μ¨λ¬λ λλ€) μ΄λ κ² μ€μ νλ©΄ TypeScript μ»΄νμΌλ¬λ λ μ격ν κ·μΉμ μ μ©νλ©°, λ³μμ λν null 체ν¬κ° κ°μ λλ€.
HTML μ‘°μμ μ€λ₯
let title = document.querySelector('#title');
title.innerHTML = 'μλ
νμΈμ'; // title is possibly Element | null
TypeScriptμμ strictNullChecks μ΅μ
μ΄ νμ±νλ κ²½μ°, μ λ©μλμ λ°ν νμ
μ Element | nullλ‘ μ€μ λλ€. λ°λΌμ title λ³μμ νμ
μ Element | nullμ΄ λλ€.
κ·Έλ¦¬κ³ μ΄λ κ² νμ
μ΄ Element | nullλ‘ μ§μ λ λ³μλ ν΄λΉ λ³μλ₯Ό μ¬μ©ν λλ§λ€ null 체ν¬λ₯Ό κ°μ λ°κ² λλ€. μ¦, title.innerHTML = 'μλ
νμΈμ';μμλ titleμ΄ nullμΌ μ μμΌλ―λ‘ null μ²΄ν¬ μμ΄λ μ½λκ° νμ©λμ§ μλλ€.
ν΄κ²°λ°©λ²
1. λͺ μμ μΌλ‘ null 체ν¬
null 체ν¬λ₯Ό μ¬μ©νμ¬ λͺ μμ μΌλ‘ μ²λ¦¬ν μλ μλ€.
let title = document.querySelector('#title');
if (title !== null) {
title.innerHTML = 'μλ
νμΈμ';
} else {
console.error('Element with id "title" not found.');
}
μ΄λ κ² νλ μ΄μ λ νμ μ€ν¬λ¦½νΈκ° λ°νμμμ λ°μν μ μλ μ μ¬μ μΈ μ€λ₯λ₯Ό μ¬μ μ λ°©μ§νκ³ μμ μ±μ ν₯μμν€κΈ° μν¨μ΄λ€. λλ¬Έμ κ°λ°μλ λͺ μμ μΌλ‘ null 체ν¬λ₯Ό μννμ¬ μλμΉ μμ μ€λ₯λ₯Ό λ°©μ§ν νμκ° μλ€.
2. optional chaining (?.μ°μ°μ)
let title = document.querySelector('#title');
title?.innerHTML = 'μλ
νμΈμ'; // titleμ΄ nullμ΄λ©΄ 무μλ¨
μ΄ μ½λλ μ΅μ λ 체μ΄λ μ°μ°μ (?.)λ₯Ό μ¬μ©νμ¬ titleμ΄ nullμ΄ μλ κ²½μ°μλ§ innerHTML μμ±μ μ κ·Όνλ€. λ§μ½ titleμ΄ nullμ΄λ©΄ ννμμ΄ μ€λ¨λκ³ ν λΉμ΄ μ€νλμ§ μλλ€.
let title = document.querySelector('#title');
if (title?.innerHTML) {
title.innerHTML = 'μλ
νμΈμ';
} else {
console.error('idκ° "title"μΈ μμλ₯Ό μ°Ύμ μ μμ΅λλ€.');
}
μμ²λΌ if-elseλ₯Ό μ¬μ©νμ¬ λμ± λͺ μμ μΌλ‘ μ μ΄ν μλ μλ€.
3. instanceof μ°μ°μ
let title = document.querySelector('#title');
if (title instanceof Element) {
title.innerHTML = 'μλ
νμΈμ';
} else {
console.error('Element with id "title" not found.');
}
title λ³μμ νμ μ narrowingνμ¬ μ¬μ©νλ€.
(Element μ리μ classλ₯Ό λ£κ³ title μ리μ objectλ₯Ό λ£μΌλ©΄ ν΄λΉ objectκ° classμ instance(μμ)μΈμ§ 체ν¬ν μ μμ΄μ κ°μ₯ λ§μ΄ μ°κ² λ κ²μ΄λΌκ³ )
4. as (type assertion)
let title = document.querySelector('#title') as Element;
title.innerHTML = 'μλ
νμΈμ';
λ μννλ μμ£Ό μ°μ§ λ§μ. νμ μ€ν¬λ¦½νΈ μ°λ μ΄μ κ° μμ΄μ§
μΆμ² : μ½λ©μ ν https://codingapple.com/ / TypeScript Documentation https://www.typescriptlang.org/docs/handbook/2/objects.html