본문으로 건너뛰기

nullundefined

자바스크립트에는 값이 없거나 초기화되지 않은 값을 나타내는 데 사용되는 두 가지 원시값이 있습니다. nullundefined입니다.

타입스크립트에는 여기에 대응되며 동일한 이름을 가지는 두 가지 타입이 있습니다. 이러한 타입의 작동 방식은 strictNullChecks 옵션의 설정 여부에 따라 달라집니다.

strictNullChecks 꺼짐

strictNullChecks꺼져 있으면, null이나 undefined 값에 정상적으로 접근할 수 있으며, nullundefined 값을 모든 타입의 프로퍼티에 할당할 수 있습니다. 이는 널 검사가 없는 언어(예: C#, Java)의 동작 방식과 유사합니다. 이러한 값을 확인하지 않는 것은 버그의 주요 원인이 되는 경향이 있습니다. 코드베이스에서 가능하다면 strictNullChecks를 켜는 것이 좋습니다.

strictNullChecks 켜짐

strictNullChecks켜져 있으면, 값이 null이나 undefined인 경우 해당 값에 메서드 또는 프로퍼티를 사용하기 전에 해당 값을 테스트해야 합니다. 선택적 프로퍼티를 사용하기 전에 undefined를 확인하는 것처럼, 좁히기를 사용하여 null일 수 있는 값을 확인할 수 있습니다.

ts
function doSomething(x: string | null) {
if (x === null) {
// 아무것도 하지 않습니다.
} else {
console.log("Hello, " + x.toUpperCase());
}
}
ts
function doSomething(x: string | null) {
if (x === null) {
// 아무것도 하지 않습니다.
} else {
console.log("Hello, " + x.toUpperCase());
}
}

널이 아닌 단언 연산자 (접미사 !)

타입스크립트에는 명시적 검사를 수행하지 않고 타입에서 nullundefined를 제거하기 위한 특별한 구문도 있습니다. 표현식 뒤에 !를 쓰는 것은, 사실상 값이 null이나 undefined가 아니라는 타입 단언입니다.

ts
function liveDangerously(x?: number | null) {
// 오류가 발생하지 않습니다.
console.log(x!.toFixed());
}
ts
function liveDangerously(x?: number | null) {
// 오류가 발생하지 않습니다.
console.log(x!.toFixed());
}

다른 타입 단언과 마찬가지로, !는 코드의 런타임 동작을 변경하지 않습니다. 따라서 값이 null이나 undefined가 될 수 없다는 것을 알고 있는 경우에만 !을 사용하는 것이 중요합니다.