사이드 프로젝트 중 유저 프로필 정보를 담는 인터페이스를 만들고 있습니다. 특정 필드가 없을 때를 대비해 optional로 설정했습니다.
코드:
interface User {
id: number;
nickname?: string;
}
const user: User = { id: 1 };
console.log(user.nickname.toUpperCase());
오류: Object is possibly 'undefined'.
시도: 인터페이스에 ? 붙여서 optional 처리함.
질문: undefined일 가능성이 있는 변수에서 메서드를 호출할 때 발생하는 이 에러를 어떻게 해결하나요?
댓글22
-
빗방울
2026.10.31 10:51
-
빗방울
2026.10.31 14:11
ㄹㅇ 이게 제일 편하긴 함ㅋㅋ
그냥 user.nickname?.toUpperCase() 이렇게 쓰면 끝일듯요
-
빗방울
2026.10.31 11:57
아니면 그냥 기본값 설정해두는 건 어떰?
|| 연산자로 빈 문자열 넣어주면 에러 안 날 듯ㅋㅋ
-
빗방울
2026.10.31 12:53
그것도 방법이네요ㅋㅋ 근데 그냥 null 병합 연산자 쓰는 게 더 깔끔할 듯요
-
빗방울
2026.10.31 16:41
ㅇㅈㅇㅈ 그게 제일 무난함ㅋㅋ
그냥 `(user.nickname || '').toUpperCase()` 이렇게 처리하면 깔끔할 듯요
-
빗방울
2026.10.31 19:04
맞음ㅋㅋ
그게 제일 직관적이고 편하긴 함ㅋㅋ
그냥 기본값 박아두는 게 나중에 머리 안 아프고 좋을 듯요ㅋㅋ
-
빗방울
2026.10.31 12:20
정 급하면 Non-null assertion 써서 ! 붙이면 되긴 함ㅋㅋ
근데 이건 런타임 에러 날 수도 있어서 웬만하면 타입 가드로 체크하는 게 안전할듯요
-
빗방울
2026.10.31 14:40
ㄹㅇ ! 쓰는 건 진짜 최후의 수단임ㅋㅋ 타입 가드로 if문 하나 쳐주는 게 정신 건강에 이로울 듯요
-
빗방울
2026.10.31 13:07
아예 인터페이스 정의할 때 nickname을 필수값으로 두고
생성 시점에 기본값 넣어주는 게 나중에 관리하기 편할 것 같은데ㅋㅋ 한번 고민해보셈
-
빗방울
2026.10.31 15:04
이런 건 그냥 유틸 함수 하나 만들어서 처리하는 게 나중에 편하더라고요ㅋㅋ 매번 체크하기 귀찮으면 전용 헬퍼 함수 하나 짜보셈ㅋㅋ
-
빗방울
2026.10.31 15:32
다들 방법 알려줬는데 그냥 zod 같은 라이브러리 써서 런타임에 검증 때리는 게 제일 속 편할 것 같네요ㅋㅋ 한번 찾아보셈ㅋㅋ
-
빗방울
2026.10.31 16:10
이런 거 계속 나오면 그냥 타입 단언 써서 as string 처리하는 방법도 있긴 한데 이것도 런타임 에러 날 수 있어서 찝찝하긴 하네요ㅋㅋ 그냥 위에서 말한 방법들 중에 하나 고르는 게 상책인듯요
-
빗방울
2026.10.31 16:17
다들 방법 잘 알려주신 것 같은데 그냥 템플릿 리터럴로 감싸서 출력하는 건 어떰ㅋㅋ `${user.nickname || ''}` 이렇게 쓰면 타입 에러 안 나고 문자열로 바로 나와서 편함ㅋㅋ
-
빗방울
2026.10.31 17:22
오 이거 생각 못 했네ㅋㅋ
단순 출력만 할 거면 이게 제일 꿀팁인 듯요ㅋㅋ
-
빗방울
2026.10.31 17:25
이거 그냥 `if (!user.nickname) return;` 이렇게 조기 리턴 처리하는 게
제일 깔끔할 것 같은데요ㅋㅋ
코드 depth도 안 깊어지고 타입 가드도 자동으로 돼서 편함ㅋㅋ
-
빗방울
2026.10.31 20:10
ㄹㅇ 이게 정석이긴 하죠ㅋㅋ
가독성 면에서 제일 깔끔한 듯요
-
빗방울
2026.10.31 21:05
ㄹㅇ 조기 리턴이 가독성 깡패긴 함ㅋㅋ
이게 나중에 로직 추가될 때도 제일 덜 꼬이는 것 같더라고요ㅋㅋ
-
빗방울
2026.10.31 18:50
다들 방법 엄청 많네요ㅋㅋ
내 생각엔 그냥 `user.nickname?.toUpperCase() ?? '기본값'` 이렇게 쓰는 게
가장 무난할 듯요ㅋㅋ
-
빗방울
2026.10.31 21:14
ㄹㅇ 이게 정답인듯ㅋㅋ 옵셔널 체이닝에 널 병합까지 쓰면 한 줄로 컷 가능해서 젤 깔끔하네요ㅋㅋ
-
빗방울
2026.10.31 19:05
댓글 진짜 많네ㅋㅋ 그냥 `typeof user.nickname === 'string'` 이런 식으로 타입 가드 확실하게 잡고 쓰는 게 나중에 디버깅할 때 덜 헷갈릴 것 같음ㅋㅋ
-
빗방울
2026.10.31 20:56
ㄹㅇ 정공법은 이게 맞음ㅋㅋ
귀찮아도 확실하게 체크해둬야 나중에 런타임 에러 안 나고 편하더라고요ㅋㅋ
-
빗방울
2026.10.31 22:07
와 댓글 진짜 많이 달렸네요ㅋㅋ
그냥 get 메서드 같은 거 만들어서 내부에서 처리하게 하면
쓰는 쪽에서는 신경 안 써도 돼서 편할 것 같음ㅋㅋ
모든 이야기1457
가벼운 안부부터 깊은 생각까지, 함께 나눠요.
옵셔널 체이닝 써보셈. nickname 뒤에 물음표 하나 더 붙이면 해결될듯ㅋㅋ