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

WebStorm中Prisma CRUD查询报SelectSubSet类型不兼容警告

WebStorm中Prisma CRUD查询出现SelectSubSet类型不兼容警告,VSCode中无此问题

问题描述

用Next.js + Prisma开发项目时,在JetBrains WebStorm IDE里,大部分Prisma CRUD查询都会弹出警告:Argument type .. is not assignable to parameter type SelectSubSet,但切换到VSCode打开项目时,该警告完全消失。

警告示例:

编辑器内显示红色警告:Argument type '{ start_date: string; end_date: string; number_of_guests: number; price: number; venue: { connect: { id: string; }; }; customer: { connect: { id: string; }; }; }' is not assignable to parameter type 'SelectSubSet<BookingCreateInput, BookingCreateInput>'

相关代码信息

传入create函数的bookingInput

bookingInput {
  start_date: '2023-11-10T15:05:52.541Z',
  end_date: '2023-11-10T19:05:52.541Z',
  number_of_guests: 2,
  price: 240,
  venue: { connect: { id: 'venue-0' } },
  customer: { connect: { id: 'user-41' } }
}

对应的BookingCreateInput类型定义

export type BookingCreateInput = {
  id?: string
  booking_date?: Date | string
  start_date: Date | string
  end_date: Date | string
  number_of_guests: number
  host_notes?: string | null
  price?: Decimal | DecimalJsLike | number | string | null
  paid?: boolean
  venue?: VenueCreateNestedOneWithoutBookingsInput
  customer?: UserCreateNestedOneWithoutBookingsInput
}

Prisma Schema定义

generator client {
  provider = "prisma-client-js"
}

datasource db {
  provider = "mysql"
  url      = env("DATABASE_URL")
}

model User {
  id         String    @id @db.VarChar(36) @default(uuid())
  email      String
  password   String
  first_name String
  last_name  String
  role       USER_ROLE @default(CUSTOMER)
  bookings   Booking[]
  ratings    Rating[]
  venues     Venue[]

  @@map("users")
}

model Venue {
  id                      String        @id @db.VarChar(36) @default(uuid())
  name                    String        @db.VarChar(50)
  description             String        @db.MediumText
  capacity                Int
  surface_area            Decimal       @db.Decimal(4, 0)
  hourly_price            Decimal       @db.Decimal(5, 0)
  opening_time            DateTime      @db.Time(4)
  closing_time            DateTime      @db.Time(4)
  status                  VENUE_STATUS  @default(PENDING)
  is_featured             Boolean?      @default(false)
  location_street         String
  location_number         String
  location_city           String
  location_zip_code       String
  location_state_province String
  location_country        String
  location_lat            Decimal       @default(0)
  location_lng            Decimal       @default(0)
  bookings                Booking[]
  ratings                 Rating[]
  activities              Activity[]
  facilities              Facility[]
  styles                  Style[]
  host_id                 String?  @db.VarChar(36)
  host                    User?    @relation(fields: [host_id], references: [id], onUpdate: NoAction)

  @@map("venues")
}

model Style {
  id           Int          @id @default(autoincrement())
  name         String
  venues       Venue[]

  @@map("styles")
}

model Facility {
  id               Int      @id @default(autoincrement())
  name             String
  venues           Venue[]

  @@map("facilities")
}

model Activity {
  id               Int       @id @default(autoincrement())
  name             String
  venues           Venue[]

  @@map("activities")
}

model Booking {
  id               String   @id @db.VarChar(36) @default(uuid())
  booking_date     DateTime @default(now())
  start_date       DateTime
  end_date         DateTime
  number_of_guests Int
  host_notes       String?
  price            Decimal? @db.Decimal(4, 0)
  paid             Boolean  @default(false)
  venue_id         String?  @db.VarChar(36)
  customer_id      String?  @db.VarChar(36)
  venue            Venue?   @relation(fields: [venue_id], references: [id], onUpdate: NoAction)
  customer         User?    @relation(fields: [customer_id], references: [id], onUpdate: NoAction)

  @@map("bookings")
}

model Rating {
  id              String  @id @db.VarChar(36) @default(uuid())
  rating          Int
  review          String?
  would_recommend Boolean
  reviewer_id     String? @db.VarChar(36)
  venue_id        String? @db.VarChar(36)
  user            User?   @relation(fields: [reviewer_id], references: [id], onDelete: Cascade, onUpdate: NoAction)
  venue           Venue?  @relation(fields: [venue_id], references: [id], onDelete: Cascade, onUpdate: NoAction)

  @@map("ratings")
}

enum USER_ROLE {
  ADMIN
  CUSTOMER
  HOST
}

enum VENUE_STATUS {
  PENDING
  APPROVED
  DECLINED
}

解决方法

  • 更新WebStorm及插件:确保WebStorm和Prisma插件都是最新版本,新版本会修复TypeScript类型推断的兼容性问题。
  • 重新生成Prisma Client:执行npx prisma generate,重新生成类型定义文件,避免缓存或损坏导致的异常。
  • 调整TypeScript设置:打开WebStorm设置(File > Settings),进入Languages & Frameworks > TypeScript,将TypeScript版本设为项目本地安装的版本,并勾选Use TypeScript service选项。
  • 清除IDE缓存:执行File > Invalidate Caches...,选择清除缓存并重启WebStorm,解决缓存引发的类型识别错误。
  • 显式指定类型:如果以上方法无效,给参数添加显式类型注解,示例:
    import { BookingCreateInput } from '@prisma/client';
    
    const bookingInput: BookingCreateInput = {
      start_date: '2023-11-10T15:05:52.541Z',
      end_date: '2023-11-10T19:05:52.541Z',
      number_of_guests: 2,
      price: 240,
      venue: { connect: { id: 'venue-0' } },
      customer: { connect: { id: 'user-41' } }
    };
    await prisma.booking.create({ data: bookingInput });
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 19:30:59