Inflearn Community Q&A
chapter7에서 타입가드가 제대로안되요
Resolved
Written on
·
592
0
여기 value에서 오류 뜨는게
'string | number | Date | Person' 형식은 'object' 형식에 할당할 수 없습니다.
'string' 형식은 'object' 형식에 할당할 수 없습니다.ts(2322)
이렇게 뜨는데 'age' 떄문인것같은데 , 개선방향을 모르겠어요
if(value && 'age' in value) {
console.log(`${value.name}은 ${value.age}살 입니다.`)
}typescript
Quiz
41% of people got it wrong. Give it a try!
Why is simply knowing the syntax not enough in TypeScript?
Due to slow code execution
It's hard to solve new problems, so
Because grammar rules change often
unable to use the type at all
Answer 2
0
0
wjdgksak
Questioner
/**
* 타입 좁히기
* 조건문 등을 이용해 넓은타입에서 좁은타입으로
* 타입을 상황에 따라 좁히는 방법을 이야기
*/
type Person = {
name: string;
age: number;
};
function fuc(value: string | number | Date | null | Person) {
// 타입가드
if(typeof value === 'string') {
console.log(value.toUpperCase());
}
if(typeof value === 'number') {
console.log(value.toFixed());
}
// null type도 typeof 출력시 object 겹쳐서 value값을 보장할 수 없음.
if(value instanceof Date) {
console.log(value.getTime())
}
// if(value && 'age' in value) {
// console.log(`${value.name}은 ${value.age}살 입니다.`)
// }
}여기있습니다
winterlood
Instructor
올려주신 코드 확인해보았습니다
문제는 else if를 사용하지 않아서 그렇습니다.
올려주신 코드에는 if문이 연달아 작성되어 있는데요, 이럴 경우 각 if 조건문 별로 리턴문이 없게 되면 타입 좁히기가 제대로 진행되지 않습니다.





타입 좁히기는 해당 조건문이 참이 되었을때 특정 타입을 보장할 수 있는 경우에만 동작하게 됩니다. 따라서 elseif를 사용하시거나 또는 각 if문 별로 Return을 시켜 앞의 조건문이 참이 되었을 경우 함수를 종료시키는 방법이 있습니다. 또는 switch/case문을 break와 함께 사용하는 방법도 고려해볼 수 있습니다.