gpt4 book ai didi

typescript - typescript 和 graphql-codegen 之间的枚举不匹配

转载 作者:行者123 更新时间:2023-12-01 23:18:54 24 4
gpt4 key购买 nike

我目前正在努力解决以下问题,但还没有走得太远。目前,我正在运行一个 Apollo-Server 作为我的 graphQL 服务器,为 prisma2 配置了一个 postgres 数据库,并利用 graphql-codegen 从我的模式中生成类型。目前,我正在尝试更新一个具有多对多关系的模型,并抛出非常奇怪的 typescript 错误。我很确定我没有正确执行更新,但我看到的错误没有帮助。

以下是相关代码片段:

prisma.schema

model Permission {
id Int @id @default(autoincrement())
verb PermissionVerb
resource PermissionModel
own Boolean @default(true)
roles Role[]
}

model Role {
id Int @id @default(autoincrement())
name String
permissions Permission[]
}

enum PermissionModel {
USER
ORDER
CUSTOMER
PERMISSION
ROLE
}

enum PermissionVerb {
CREATE
READ
UPDATE
DELETE
}

permission.gql

extend type Mutation {
updatePermission(input: UpdatePermissionInput): PermissionResult!
}

union PermissionResult = Permission | PermRoleNotFoundError

type Permission {
id: Int!
own: Boolean
resource: PermissionModel!
verb: PermissionVerb!
roles: [Role]
}

type Role {
id: Int!
name: String!
permissions: [Permission]
}

type PermRoleNotFoundError {
message: String!
}

enum PermissionModel {
USER
ORDER
CUSTOMER
PERMISSION
ROLE
}

enum PermissionVerb {
CREATE
READ
UPDATE
DELETE
}

最后是解析器中的违规代码:

updatePermission.ts

export const updatePermission: Resolver<
ResolversTypes['UpdatePermissionInput'],
{},
Context,
RequireFields<MutationUpdatePermissionArgs, never>
> = async (_parent, args, context, _info) => {
const { id, verb, resource, own } = args.input

const oldPermission = await context.prisma.permission.findFirst({
where: { id },
include: { roles: true }
})

const newPermission = await context.prisma.permission.update({
where: { id },
data: {
id: oldPermission.id,
verb: verb ? verb : oldPermission.verb,
resource: resource ? resource : oldPermission.resource,
own: own ? own : oldPermission.own,
},
})

return newPermission
}

我收到以下 typescript 警告:

Type '(_parent: {}, args: RequireFields<MutationUpdatePermissionArgs, never>, context: Context, _info: GraphQLResolveInfo) => Promise<...>' is not assignable to type 'Resolver<UpdatePermissionInput, {}, Context, RequireFields<MutationUpdatePermissionArgs, never>>'.
Type '(_parent: {}, args: RequireFields<MutationUpdatePermissionArgs, never>, context: Context, _info: GraphQLResolveInfo) => Promise<...>' is not assignable to type 'ResolverFn<UpdatePermissionInput, {}, Context, RequireFields<MutationUpdatePermissionArgs, never>>'.
Type 'Promise<Permission>' is not assignable to type 'UpdatePermissionInput | Promise<UpdatePermissionInput>'.
Type 'Promise<Permission>' is not assignable to type 'Promise<UpdatePermissionInput>'.
Type 'Permission' is not assignable to type 'UpdatePermissionInput'.
Types of property 'verb' are incompatible.
Type 'import(\"/Users/jrichardson/Documents/Projects/wsw/node_modules/.prisma/client/index\").PermissionVerb' is not assignable to type 'import(\"/Users/jrichardson/Documents/Projects/wsw/backend/src/generated/graphql\").PermissionVerb'.
Type '\"CREATE\"' is not assignable to type 'PermissionVerb'.

我不明白为什么它认为 PermissionVerb 不可分配 - 正如我从 .prisma/client/index 和 generated/graphql 中看到的那样,两个枚举是相同的。不确定我在这里遗漏了什么。

任何帮助将不胜感激!谢谢

最佳答案

您还可以通过在 codegen.yml 中进行设置来告诉 graphql-codegen 创建枚举为 const(字符串联合):

config:
enumsAsConst: true

关于typescript - typescript 和 graphql-codegen 之间的枚举不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68397842/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com