TypeScript报错:never类型无法分配给Promise数组等目标类型
解决 "Type never is not assignable to promise array, boolean and error as value" 类型错误
核心原因
手动指定的OrderQueryResult类型与PrismafindMany返回的实际类型不匹配,导致TypeScript推断出never类型,触发赋值错误。
具体修复方案
1. 移除手动类型断言,让Prisma自动推导返回类型
Prisma会根据select的字段自动生成精确的返回类型,手动指定类型如果和实际结构不一致就会引发冲突。修改代码:
// 移除手动指定的 OrderQueryResult 类型 const allOrders = await prisma.orders.findMany({ where: whereClause, select: { id: true, awbNumber: true, ChannelOrder_Id: true, deliveryPartner: true, shippingDate: true, status: true, Packages : { select: { productName: true, } }, buddyShield : { select: { remarks: true, buddyShieldUploadProof: true, rtoStarted: true, } }, Users: { select: { fullname: true, } }, } });
2. 对齐OrderSecondSchema与Prisma返回结构
检查并调整自定义类型,确保和select的字段完全匹配:
- 确认
OrderStatus是与Prisma生成的枚举一致的类型(可从@prisma/client导入) - 如果
Users关联是可选的,需将Users: User改为Users: User | null - 确保所有嵌套字段的结构和
select结果严格一致
3. 为函数指定明确的返回类型
先让TypeScript自动推导返回类型,再将其提取为显式类型:
// 先注释返回类型,鼠标悬停在函数名上获取自动推导的类型,再定义 type GetFilteredOrdersResult = { orders: OrderSecondSchema[]; totalPages: number; currentPage: number; totalOrders: number; }; export async function getFilteredOrders(filters: OrderFilters): Promise<GetFilteredOrdersResult> { // ... 现有逻辑 }
4. 确保userIdString的有效性
如果getCurrentUser()可能返回null/undefined,需添加校验,避免无效查询条件导致类型错误:
const userIdString = getCurrentUser(); if (!userIdString) { throw new Error("用户未认证"); // 或返回空结果: // return { orders: [], totalPages: 0, currentPage: page, totalOrders: 0 }; }
5. 替换any类型为Prisma专属类型
避免使用any定义whereClause,改用Prisma提供的类型确保查询条件合法:
import { Prisma } from '@prisma/client'; const whereClause: Prisma.OrdersWhereInput = { status: { in: ['RTO_IN_TRANSIT', 'RTO_DELIVERED'] as const, }, usersId: userIdString, };
内容的提问来源于stack exchange,提问作者Neel Chalke
相关产品推荐
相关产品推荐

