강의

멘토링

로드맵

Inflearn brand logo image

인프런 커뮤니티 질문&답변

조병기님의 프로필 이미지
조병기

작성한 질문수

[코드팩토리] [초급] 8시간만에 끝내는 코드팩토리의 Typescript 완전정복 풀코스

Narrowing (내로잉) 기본기

Equality Narrowing 관련 질문

작성

·

81

0

[코드팩토리] [초급] 8시간만에 끝내는 코드팩토리의 Typescript 완전정복 풀코스의 Narrowing 강좌중
Equality Narrowing 관련 질문입니다.
예시로

let numborOrString2  : number | string  = Math.random() > 0.5 ?  1123 : '아이유';
let stringOrBoolean2 : string | boolean = Math.random() > 0.5 ?  '아이브' : true;

if (numborOrString2 === stringOrBoolean2){
    numborOrString2;
    stringOrBoolean2;
} else {
    numborOrString2;
    stringOrBoolean2;
}

주셨는데.. 이 예시를 보면 Narrowing이 되는것을 확인 할수 있지만
1. '===' 은 실체 같은지 까지 비교 하고는 오퍼레이터로 알고 있는데요.. 그럼 if 절이 true인 경우는 없어서 실제 사용할수 없는 코드가 아닌가 하는 의문이 있습니다.

  1. 1번과 같은 질문일수도 있는데.. type이 같은지('string')를 확인 할 목적인데 왜 '===' 사용할까 하는 의문과

    if ((typeof numborOrString2) === (typeof stringOrBoolean2))

    사용하는 것이 좋지 않을까 생각해 봤는데..실제 narrow은 되지 않는 것을 확인했습니다. 좀 혼란스럽습니다.

     

답변 2

0

코드팩토리님의 프로필 이미지
코드팩토리
지식공유자

안녕하세요!

1) Narrowing은 JS 관점에서 발생하는게 아닙니다. TS 관점입니다. 실제 값은 true일 수 없으나 Narrowing 되는 타입을 본다면 타입 Narrowing이 됩니다.

1,2번 함께 답변 되었을까요?

감사합니다!

0

안녕하세요, 인프런 AI 인턴입니다. 조병기님.

질문해주신 부분은 TypeScript의 narrowing과 관련된 사항인데요, 이를 통해 변수의 타입을 점차적으로 좁히는 방식으로 여러분이 보다 안전한 코드를 작성할 수 있도록 돕는 기능입니다.

  1. === 연산자 사용에 대한 의문: === 연산자는 두 값의 엄격한 동등성을 비교합니다. 즉, 두 값이 같은 타입인지와 같은 값을 가지는지를 검사하죠. 그래서 number | stringstring | boolean을 비교하는 경우, 두 값이 같은 타입이더라도 값이 다를 수 있습니다. 그래서 실제로 if 조건이 true가 되기 힘든 경우가 많습니다. 이는 개발자가 코드를 작성할 때 실수로 동등한 타입과 값이 아니라면 오류를 쉽게 발견할 수 있도록 돕기 위한 경우일 수 있습니다.

  2. typeof 연산자 사용과 Narrowing: typeof 연산자는 변수의 타입을 반환하기 때문에, 두 변수의 타입을 비교할 수는 있지만 그 결과로 자동적으로 좁히기(Narrowing)에는 사용할 수 없습니다. TypeScript의 코드는 typeof를 통한 타입 비교만으로는 변수의 타입을 충분히 좁힐 수 없도록 설계됩니다.

추가적으로, TypeScript에 대한 구체적인 내용은 타입스크립트의 내로잉과 타입 비교의 게시물에서 찾아보실 수 있습니다.

이를 통해 narrowing의 사용과 === 또는 typeof 연산자 사용에 대한 이해를 높일 수 있을 것입니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

조병기님의 프로필 이미지
조병기

작성한 질문수

질문하기