에 대한 유형에 문제가 Promises.all
있습니다. 내 Video[]
인터페이스 를 반환해야 하지만 다음과 같은 오류가 발생했습니다.
'(Video | undefined) []'유형은 'Video []'유형에 할당 할 수 없습니다. '비디오 | undefined '는'Video '유형에 할당 할 수 없습니다. '정의되지 않음'유형은 '비디오'유형에 할당 할 수 없습니다.
(Video | undefined)[]
전체 타이핑 으로 변경하면 오류가 Video[]
다시 발생해야 합니다.
내 코드는 다음과 같습니다.
const getDemo = async () => {
setError({ show: false, msg: "" });
try {
setIsLoading(true);
const resp: Video[] = await Promise.all(
ourData.map(async (item) => {
if (item.type === videoConstants.TYPE_YOUTUBE) {
return getYouTubeVideo(item.id);
}
if (item.type === videoConstants.TYPE_VIMEO) {
return getVimeoVideo(item.id);
}
})
);
setData([...data, ...resp]);
} catch {
setError({ show: true, msg: "failed to watch demo" });
}
setIsLoading(false);
};
"DRY"규칙을 유지하기 위해 API를 가져 오는 자체 함수를 사용하고 있습니다. 단일 개체를 가져 오는 것은 괜찮지 만 for Promise.all
를 사용하여 데이터베이스에서 모든 컬렉션을 가져 오면 처리 할 수없는 오류가 발생합니다.
아래 코드 :
if (item.type === videoConstants.TYPE_YOUTUBE) {
return getYouTubeVideo(item.id);
}
if (item.type === videoConstants.TYPE_VIMEO) {
return getVimeoVideo(item.id);
}
블록 Video | undefined
이 없기 때문에 반환 유형이 있습니다 else
.
이 방법을 시도해 볼 수 있습니다 (에 item.type
있는 두 값만 사용할 수있는 경우 videoConstants
).
if (item.type === videoConstants.TYPE_YOUTUBE) {
return getYouTubeVideo(item.id);
}
return getVimeoVideo(item.id);
또는 아마도 :
if (item.type === videoConstants.TYPE_YOUTUBE) {
return getYouTubeVideo(item.id);
}
if (item.type === videoConstants.TYPE_VIMEO) {
return getVimeoVideo(item.id);
}
return {} as Video // TODO: depends on Video
또는 위의 작업을 수행 할 수없는 경우 마지막 옵션 일 수 있습니다. const resp: (Video|undefined)[] = ...
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다