타입스크립트 인터페이스에서 string 타입 유형을 제대로 인식하지 못하는 문제?

조회 91

profile picture

익명

2월 28일

foods라는 객체배열을 선언하고 Food 타입을 정의했는데요. foods의 type을 string으로 인식해서 Food type의 type인 'Dairy' | 'Protein' 로 인식을 못하는 문제입니다 ㅜ as Food[] 로 타입 단언 해주면 해결되긴 하는데 타입 단언이 안좋다고 들어서요. 이런 에러코드가 나와요. Types of property 'type' are incompatible. Type 'string' is not assignable to type 'foodType' 아래는 코드입니다.

구체적이고 정성스러운 질문에 Up 투표를 눌러주세요.

설명이 부족한 질문에 Down 투표를 눌러주세요. 커리어리가 질문자에게 수정을 요청할게요.

답변 2

강동희님의 프로필 사진

선언하신 foods를 참조해 사용할 경우 string으로 인식하지는 않을것 같습니다만.. 실제로 저 객체를 사용하셨을때 타입스크립트가 string 이라고 판단하고 있는 코드를 첨부해주시면 질문에 의도에 부합하는 답변이 나올거라고 생각합니다😁

손정현님의 프로필 사진

안녕하세요! 타입스크립트는 기본적으로 type을 명시해주지 않으면 타입 추론을 하게됩니다. 질문자님의 코드를 봤을때 타입스크립트 입장에서는 foods 속 객체들이 Food임을 명확하게 알수없기때문에 타입 추론을 하고 있어요. 동희님 의견처럼 타입스크립트가 에러가 나고있는 코드를 첨부해주시면 답변에 도움이 될 것 같습니다. 우선 제가 예상하기로는 const someFunc = (foods: Food[]) => {...} 형태의 함수가 있을때 someFunc(foods)로 호출하시면 말씀하신 에러가 날 것 같은데요. 이거는 foods를 선언하실때 const foods: Food[] = [...] 로 선언해주시면 해결할 수 있는 문제인것 같네요. 이 케이스에서는 타입 추론 대신 foods에 명확한 타입을 명시해줌으로서 해결하는 방법이에요. 다만 이렇게 타입을 명시해주는게 어쩔 때는 독이 될 수 있어서 케바케로 타입 추론과 명시적인 타입을 혼용해서 쓰는게 좋은것 같아요. ex) 대개 함수의 리턴 타입은 타입 추론으로 하시는게 오히려 좋을수도 있습니다 참고해보시면 좋을 것 같아요 :) - https://www.typescriptlang.org/docs/handbook/type-inference.html

지금 가입하면 모든 질문의 답변을 볼 수 있어요!

현직 개발자들의 명쾌한 답변을 얻을 수 있어요.

또는

이미 회원이신가요?

지금 가입하면 모든 질문의 답변을 볼 수 있어요!

현직 개발자들의 명쾌한 답변을 얻을 수 있어요.