반응형
형식 스크립트 속성이 유니언 유형에 없습니다.
이것은 몇 번인가 마주친 상황입니다만, 꽤 간단하다고 생각됩니다만, 타입을 어느 쪽에도 설정하지 않는 솔루션을 찾을 수 없습니다.
함수는 두 개의 다른 개체 중 하나를 인수로 사용하여 수신된 개체를 확인하고 대응하는 필드를 반환합니다.
이것은 문제의 간단한 버전이지만, 문제는 두 개체가 서로 겹치지 않는 속성으로만 구분할 수 있고 다른 유형에는 없기 때문에 속성에 액세스할 수 없다는 것입니다.
type Obj1 = {
message: string
}
type Obj2 = {
text: string
}
const getText = (obj: Obj1 |obj2): string => {
if (obj.message) {
return obj.message
}
return obj.text
}
활자를 좁혀야 해요.이 작업은 연산자를 사용하여 수행할 수 있습니다.
const getText = (obj: Obj1 | Obj2): string => {
if ("message" in obj) {
return obj.message
}
return obj.text
}
오브젝트는 다음 중 하나에 캐스팅할 수 있습니다.Obj1
또는Obj2
:
type Obj1 = {
message: string
}
type Obj2 = {
text: string
}
const getText = (obj: Obj1 | Obj2): string => {
if ((obj as Obj1).message) {
return (obj as Obj1).message
}
return (obj as Obj2).text
}
이 문제에 대한 진짜 대답은 소유자가 한 질문에 따르면 다음과 같습니다.
하지만 당신이 사용하고 있는 시간이 있을 수 있습니다.your defined type
와 함께primitive type
이 방법으로는 내가 여기서 직면한 문제가 상황이기 때문에 위의 해결책은 작동하지 않을 것이다.
type Obj1 = {
message: string
}
const getText = (obj: Obj1 |string): string => {
if (obj.message) {
return obj.message
}
return obj.text
}
이 시나리오는 위에서 설명한 솔루션이 고객에게 완벽하지 않기 때문에typeof
✌️
const getText = (obj: Obj1 | string): string => {
if (typeof obj !== 'string') {
return obj.message
}
return obj.text
}
저는 타이프스크립트를 추천합니다.
import { is } from 'typescript-is';
...
const getText = (obj: Obj1 | Obj2): string => {
if (is<Obj1>(obj)) {
return obj1.message;
}
return obj2.text;
};
언급URL : https://stackoverflow.com/questions/58974640/typescript-property-does-not-exist-on-union-type
반응형
'sourcecode' 카테고리의 다른 글
인덱스로 JSON 개체의 속성을 검색하시겠습니까? (0) | 2023.04.04 |
---|---|
material-ui TextField, DropDownMenu 컴포넌트에서 데이터를 가져오려면 어떻게 해야 합니까? (0) | 2023.04.04 |
2개의 JSON 개체를 연결합니다. (0) | 2023.04.04 |
Woocommerce 제품의 할인된 가격과 백분율을 표시합니다. (0) | 2023.04.04 |
WooCommerce - 제품 페이지 외부에 카트 항목 이름 나열 (0) | 2023.04.04 |