You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Prisma中创建资源时使用接口遇类型不兼容问题求助

解决Prisma Json列与自定义接口的类型兼容问题

方法1:直接类型断言(快速解决)

直接把你的IProductInfoAction对象断言为Prisma提供的InputJsonValue类型,让TypeScript认可类型匹配:

修改创建数据的代码:

import { InputJsonValue } from '@prisma/client';

const action: Action = await this.prisma.action.create({
    data: {
        target: data.target,
        duration: data.duration,
        idle_time: data.idle_time,
        filters: data.filters,
        type: Type[data.type],
        score: 0,
        sessionId: data.sessionId,
        searched_term: data.searched_term,
        ...(data.product_info ? {
            product_info: data.product_info as InputJsonValue // 添加类型断言
        } : {})
    }
});

方法2:扩展Prisma的JSON类型(全局生效)

如果不想每次都写断言,可以通过TypeScript模块扩展,让InputJsonValue自动包含你的自定义接口类型:

在项目根目录创建prisma-types.d.ts文件,写入以下内容:

import { InputJsonValue } from '@prisma/client';
import { IProductInfoAction } from './path-to-your-interface'; // 替换为你的接口实际路径

declare module '@prisma/client' {
    type InputJsonValue = 
        | IProductInfoAction
        | string
        | number
        | boolean
        | null
        | InputJsonValue[]
        | { [key: string]: InputJsonValue };
}

之后你的IProductInfoAction会被TS自动识别为合法的InputJsonValue,无需再手动断言。

方法3:类型安全的转换函数(适合复杂场景)

如果需要严格校验输入结构,可写一个转换函数同时做类型检查:

import { InputJsonValue } from '@prisma/client';
import { IProductInfoAction } from './path-to-your-interface';

function toProductInfoInput(data: IProductInfoAction): InputJsonValue {
    // 可选:添加结构校验逻辑
    if (typeof data.price !== 'number') {
        throw new Error('product_info.price 必须是数字类型');
    }
    return data as InputJsonValue;
}

创建数据时使用这个函数:

...(data.product_info ? {
    product_info: toProductInfoInput(data.product_info)
} : {})

内容的提问来源于stack exchange,提问作者KyuolDa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 01:31:15