Supabase插入后查询报错:OrderID属性不存在于数组类型
问题解决:Supabase插入后访问返回字段报错
Property 'OrderID' does not exist on type '{ [x: string]: any; }[]' 这个错误的核心原因是:Supabase的.insert().select()方法返回的data是数组类型——哪怕你只插入一行数据,它也会返回包含单个元素的数组,而非直接返回单个对象。你直接用data.OrderID访问数组的属性,自然触发TypeScript类型错误。
修复步骤:
- 取数组第一个元素获取插入的订单数据
- 增加空值判断,避免插入后无返回数据导致的报错
- (可选)添加类型定义,让TypeScript有更准确的类型提示
修改后的代码:
const pushToSupabase = async()=>{ try{ const { data, error } = await supabase .from('Orders') .insert({userID: userInfo.id, Total: totalPrice()}) .select(); if(error) throw error; // 先判断data是否存在且包含数据 if(!data || data.length === 0) { throw new Error('插入订单后未返回数据'); } // 取数组第一个元素 const order = data[0]; const OrderNo: string = order.OrderID; const Date: string = order.Date.toString(); AddToOrders(OrderNo, Date, totalPrice()); console.log('added to orders'); console.log(order); }catch(error){ console.log(error); } }
额外优化(可选):
如果用TypeScript,可以定义订单类型让类型检查更严谨:
interface Order { OrderID: string; Date: Date; userID: string; Total: number; // 补充其他订单字段 } // 获取数据时添加类型断言 const { data, error } = await supabase .from('Orders') .insert({userID: userInfo.id, Total: totalPrice()}) .select() as { data: Order[] | null; error: any };
内容的提问来源于stack exchange,提问作者Mat
相关产品推荐
相关产品推荐

