React Native TypeScript编译错误:Generator类型缺失UploadToGetID属性
解决生成器函数的TypeScript类型不匹配错误
错误原因
你直接将生成器函数的返回类型声明为UploadToGetID,但TypeScript中生成器函数的类型是Generator<Yield类型, 返回值类型, 传入类型>,生成器对象本身并非UploadToGetID类型,而是最终返回值为该类型,因此编译器报错说生成器对象缺少imageId、imageThumbId属性。
修复方案
将函数的返回类型修改为Generator<any, UploadToGetID, unknown>,明确指定生成器的最终返回值类型是UploadToGetID,同时保留生成器的特性。另外需要确保函数的所有分支都返回UploadToGetID类型的对象(比如try块末尾也要添加return语句)。
修改后的代码示例
type UploadToGetID = { imageId: string | undefined; imageThumbId: string | undefined; }; // 修改返回类型为Generator,指定最终返回值是UploadToGetID function* uploadImageOrVideoToGetId( image: Image | undefined, imageThumb: ImageThumb | undefined, ): Generator<any, UploadToGetID, unknown> { const uploadId: UploadToGetID = { imageId: undefined, imageThumbId: undefined, }; try { if (image) { const token = yield Helper.getDataStored(JWT_KEY); let newImage: ImageResizerResponse = yield call( ImageResizer.createResizedImage, imageThumb!.url!, 5000, 5000, 'JPEG', 100, ); let file = newImage.uri; if (Platform.OS === 'android') { file = newImage.uri.replace('file://', ''); } // 补充你的上传逻辑,比如设置uploadId.imageId等 // ... } // try块末尾添加return,确保正常分支也返回uploadId return uploadId; } catch (error) { Alert.alert('Upload image fail! ' + error); return uploadId; } }
额外说明
- 如果你能明确
yield出去的值的类型,可以把Generator<any, UploadToGetID, unknown>中的any替换为具体类型(比如string、Promise<any>等),让类型检查更严格。 - 确保所有代码路径都返回
UploadToGetID对象,避免出现无返回值的情况导致类型异常。
内容的提问来源于stack exchange,提问作者Trần Ân
相关产品推荐
相关产品推荐

