需要有关我的 Next.js 应用程序上的服务器操作的帮助,给我一个类型错误并且无法查明原因,当 orderProduct 的
db.insert
上有 3 个值时,它就会出现,并且总是错误地输出第一个值无论它是什么领域。
创建订单.tsx
products.map(async ({ productId, quantity, variantId }) => {
await db.insert(orderProduct).values({
productVariantId: variantId,
productId: productId,
quantity,
orderId: order[0].id,
})
})
架构
export const orderProduct = pgTable('order_product', {
id: serial('id').primaryKey(),
quantity: integer('quantity').notNull(),
productVariantId: serial('productVariantId')
.notNull()
.references(() => productVariants.id, { onDelete: 'cascade' }),
productId: serial('productId')
.notNull()
.references(() => products.id, { onDelete: 'cascade' }),
orderId: serial('orderId')
.notNull()
.references(() => orders.id, { onDelete: 'cascade' }),
})
类型
import * as z from 'zod'
export const createOrderSchema = z.object({
total: z.number(),
status: z.string(),
paymentIntentId: z.string(),
products: z.array(
z.object({
quantity: z.number(),
productId: z.string(),
variantId: z.string(),
}),
),
})
错误信息
No overload matches this call.
Overload 2 of 2, '(values: { quantity: number | SQL<unknown> | Placeholder<string, any>; id?: number | SQL<unknown> | Placeholder<string, any> | undefined; productId?: number | SQL<...> | Placeholder<...> | undefined; productVariantId?: number | ... 2 more ... | undefined; orderId?: number | ... 2 more ... | undefined; }[]): PgInsertBase<...>', gave the following error.
Object literal may only specify known properties, and 'productVariantId' does not exist in type '{ quantity: number | SQL<unknown> | Placeholder<string, any>; id?: number | SQL<unknown> | Placeholder<string, any> | undefined; productId?: number | SQL<...> | Placeholder<...> | undefined; productVariantId?: number | ... 2 more ... | undefined; orderId?: number | ... 2 more ... | undefined; }[]'.ts(2769)
这是错误,如果我移动 db.insert 的值,它会是相同的
找到答案,在我的类型上,对于
z.number()
和 z.string()
应该是
productId
而不是
variantId
import * as z from 'zod'
export const createOrderSchema = z.object({
total: z.number(),
status: z.string(),
paymentIntentId: z.string(),
products: z.array(
z.object({
quantity: z.number(),
productId: z.number(),
variantId: z.number(),
}),
),
})