TypeScript如何判断API返回值为数组并解决forEach类型错误
解决TypeScript联合类型的forEach属性不存在报错
你的问题出在typeof referralsList === "object"的判断范围太宽泛——数组和返回的错误对象{ message: string }都属于object类型,TypeScript无法确定此时referralsList具体是数组还是错误对象,因此会报错forEach不存在。以下是两种可行的修改方案:
方案一:使用Array.isArray()做类型守卫
这是最直接的解决方式,Array.isArray()是TypeScript认可的原生类型守卫,能精准判断变量是否为数组,自动将类型收窄为SubmissionDetails[]:
if (Array.isArray(referralsList)) { referralsList.forEach((item: SubmissionDetails) => { item.id = item.submissionID }) }
方案二:自定义类型守卫区分错误对象
如果需要明确区分返回的是数组还是错误对象,可以自定义类型守卫函数:
// 定义类型守卫,判断是否为错误消息对象 function isErrorResponse(obj: unknown): obj is { message: string } { return typeof obj === 'object' && obj !== null && 'message' in obj; } // 使用类型守卫处理返回值 if (!isErrorResponse(referralsList)) { referralsList.forEach((item: SubmissionDetails) => { item.id = item.submissionID }) }
内容的提问来源于stack exchange,提问作者user11631308
相关产品推荐
相关产品推荐

