👶 TypeScript

탈출구 - 확실한 할당 어서션

개발자 린다씨 2023. 1. 22. 12:00
반응형

확실한 할당 어서션

TypeScript는 확실한 할당 검사용으로 nonnull 어서션을 적용하는 특별한 상황에 사용할 특수 문법을 제공합니다.

let userId: string
userId.toUpperCase(); // 'userId' 변수가 할당되기 전에 사용되었습니다.ts(2454)

이 에러 검출은 TypeScript가 제공하는 멋진 서비스입니다. 

 

userId 변수를 선언했지만 값을 할당하는 걸 깜빡 잊은 채 대문자 변환 작업을 수행했습니다.

 

TypeScript가 검출해주지 않았다면 런타임 에러가 발생했을 것입니다.

 

하지만 코드가 다음과 같다면 어떨까요?

let userId: string
fetchUser()

userId.toUpperCase(); // 'userId' 변수가 할당되기 전에 사용되었습니다.ts(2454)
function fetchUser() {
  userId = globalCache.get('userId')
}

우연하게 적중률 높은 캐시를 개발했다고 가정해 봅니다.

 

따라서 fetchUser를 호출하면 항상 userId가 올바로 정의됨을 보장합니다.

 

하지만 TypeScript는 정적 검사만으로는 이 사실을 알아채지 못하므로 이전과 같은 에러를 발생시켰습니다.

 

이런 상황에선 확실한 할당 어서션을 이용하여 userId를 사용하는 시점엔 이 변수가 반드시 할당되어 있을 것임을 TypeScript에 알려줄 수 있습니다.

let userId!: string
fetchUser()

userId.toUpperCase(); // OK
function fetchUser() {
  userId = globalCache.get('userId')
}

그러나 타입 어서션, nonnull 어서션과 마찬가지로 확실한 할당 어서션을 너무 자주 사용하고 있다면 무언가 잘못되어가는 중일 수 있습니다.

반응형