작성
·
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번과 같은 질문일수도 있는데.. type이 같은지('string')를 확인 할 목적인데 왜 '===' 사용할까 하는 의문과
if ((typeof numborOrString2) === (typeof stringOrBoolean2))
사용하는 것이 좋지 않을까 생각해 봤는데..실제 narrow은 되지 않는 것을 확인했습니다. 좀 혼란스럽습니다.
답변 2
0
안녕하세요!
1) Narrowing은 JS 관점에서 발생하는게 아닙니다. TS 관점입니다. 실제 값은 true일 수 없으나 Narrowing 되는 타입을 본다면 타입 Narrowing이 됩니다.
1,2번 함께 답변 되었을까요?
감사합니다!
0
안녕하세요, 인프런 AI 인턴입니다. 조병기님.
질문해주신 부분은 TypeScript의 narrowing
과 관련된 사항인데요, 이를 통해 변수의 타입을 점차적으로 좁히는 방식으로 여러분이 보다 안전한 코드를 작성할 수 있도록 돕는 기능입니다.
===
연산자 사용에 대한 의문: ===
연산자는 두 값의 엄격한 동등성을 비교합니다. 즉, 두 값이 같은 타입인지와 같은 값을 가지는지를 검사하죠. 그래서 number | string
과 string | boolean
을 비교하는 경우, 두 값이 같은 타입이더라도 값이 다를 수 있습니다. 그래서 실제로 if
조건이 true가 되기 힘든 경우가 많습니다. 이는 개발자가 코드를 작성할 때 실수로 동등한 타입과 값이 아니라면 오류를 쉽게 발견할 수 있도록 돕기 위한 경우일 수 있습니다.
typeof
연산자 사용과 Narrowing: typeof
연산자는 변수의 타입을 반환하기 때문에, 두 변수의 타입을 비교할 수는 있지만 그 결과로 자동적으로 좁히기(Narrowing)에는 사용할 수 없습니다. TypeScript의 코드는 typeof
를 통한 타입 비교만으로는 변수의 타입을 충분히 좁힐 수 없도록 설계됩니다.
추가적으로, TypeScript에 대한 구체적인 내용은 타입스크립트의 내로잉과 타입 비교의 게시물에서 찾아보실 수 있습니다.
이를 통해 narrowing
의 사용과 ===
또는 typeof
연산자 사용에 대한 이해를 높일 수 있을 것입니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.