해결된 질문
작성
·
146
0
type Post = {
title: string;
author?: string;
};
let post: Post = {
title: "한입",
author: "이정한",
};
const len: number = post.author!.length;
console.log(len);
안녕하세요 강의를 듣다가 질문이 있어서 남깁니당
Non Null 타입은 선택적 프로퍼티에 값이 존재할 때만 사용할 수 있는건가요? post 객체에 author 프로퍼티를 정의하지 않고 파일을 실행하니 오류가 납니다!
답변 2
1
안녕하세요 이정환입니다.
우선 Non null 단언(!)은 해당 값이 null이나 undefined이 아님을 우리 "개발자들이 보증한다" 라는 의미의 문법입니다. 타입 검사 단계에서 일종의 눈속임을 하는거죠
따라서 person!.age 처럼 사용하면, 실제로 person 객체에 age 프로퍼티가 없더라도 TypeScript는 컴파일 단계에서 오류를 발생시키지 않습니다.
그러나 런타임 오류는 동일하게 발생합니다. person 객체에 age 프로퍼티가 존재한다고 눈속임 하였으나, 실제로 코드가 실행되었을 때(런타임에) person에 age 프로퍼티가 없기 때문에 실행하면 오류가 발생하게 되는 것 입니다.
PS. AI 인턴도 좋은 답을 남겨주었으니 참고해보시면 좋을 것 같아요
0
안녕하세요, 인프런 AI 인턴입니다.
쟁쟁님의 질문에 대해 답변드리겠습니다. Non-null assertion(!
)은 TypeScript에서 해당 값이 null 또는 undefined가 아님을 단언하는 연산자입니다. 즉, 해당 값이 확실히 null 또는 undefined가 아닐 때 사용하여 타입 체커에게 해당 값을 null이나 undefined로 간주하지 않도록 할 수 있습니다.
선택적 프로퍼티(author?
)에 대한 질문에서, 값이 있을 때만 non-null assertion을 사용할 수 있는지에 대해 질문하셨는데, 이는 실제 값의 존재 여부와 관계없이 사용할 수 있습니다. 하지만 값을 사용하는 시점에 실제로 null 또는 undefined일 경우 런타임 오류가 발생할 수 있으므로 주의가 필요합니다.
구체적으로 post.author!.length
에서 non-null assertion을 사용하는 경우, post.author
값이 실제로 있음을 단언하는 것이기 때문에 TypeScript 컴파일러는 오류를 발생시키지 않습니다. 그러나 실제 런타임에 해당 프로퍼티가 없다면(undefined
) JavaScript 오류가 발생합니다.
당신의 코드 예제에서 author
프로퍼티가 선택적으로 지정되어 있고, 실제로 값을 제공하지 않았을 때 non-null assertion을 사용하면, 런타임에서 Cannot read property 'length' of undefined
와 같은 오류가 나게 됩니다.
다음은 비슷한 주제에 대해 질문하셨던 다른 수강생의 질문과 지식공유자의 답변 링크입니다:
이정환 강사님의 답변에 따르면, author
프로퍼티가 undefined
일 수도 있다고 명시해두었기 때문에 자동으로 Optional Chaining (?.
)을 걸어주는 것이 일반적입니다. 이는 코드나 환경설정의 문제가 아니라, author가 선택적 프로퍼티이기 때문입니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.