根据我分配给根节点的类型,从根查询接收类型检查错误。 GraphQL,打字稿。表示
Posted
技术标签:
【中文标题】根据我分配给根节点的类型,从根查询接收类型检查错误。 GraphQL,打字稿。表示【英文标题】:Receiving type-checking error from root query based on the type I assign to my root nodes. GraphQL, TypeScript. Express 【发布时间】:2021-06-03 04:54:53 【问题描述】:我对 typescript/graphql 世界很陌生,当我定义我的一个根节点的类型时,我收到了一个奇怪的错误。我正在实现的根节点只是在解析函数中按 ID 返回用户,因此,我正在使用我创建的 UserType 填充“类型”键。但是,我从打字稿中得到一个错误提示
fields: Thunk<GraphQLFieldConfigMap<TSource, TContext>>;
~~~~~~
The expected type comes from property 'fields' which is declared here on type 'Readonly<GraphQLObjectTypeConfig<any, any>>'
rootQuery.ts 文件:
import mongoose from "mongoose";
import GraphQLObjectType, GraphQLString from "graphql";
const UserType = "./user_type.ts";
const User = mongoose.model("user");
const RootQueryType = new GraphQLObjectType(
name: "RootQueryType",
fields: () => (
getUserById:
type: UserType,
args:
id: type: GraphQLString ,
,
async resolve(_, id )
try
return await User.findById(id);
catch (err)
console.error(err.message);
,
,
),
);
module.exports = RootQueryType;
user_type.ts 文件:
import GraphQLObjectType, GraphQLString, GraphQLList from 'graphql'
const UserType = new GraphQLObjectType(
name: 'User',
fields: () => (
name: type: GraphQLString ,
email: type: GraphQLString ,
password: type: GraphQLString ,
language: type: GraphQLString ,
topics: type: new GraphQLList(GraphQLString)
)
)
module.exports = UserType;
错误指向 RootQueryType 中的“字段”键。当我用 'GraphQLString' 替换 'getUserById' 节点中的 'type' 键的值时,错误消失了。但显然这不是我想要的,因为返回值将被引用到 UserType。
感谢您的宝贵时间。
【问题讨论】:
【参考方案1】:我发现这是我在 rootQuery.ts 文件中导入/需要 graphql 包的方式。我没有导入,而是将其更改为:
const graphql = require('graphql')
const GraphQLObjectType, GraphQLString = graphql;
但我不明白为什么。 require 与 import 相比如何导致错误?
【讨论】:
以上是关于根据我分配给根节点的类型,从根查询接收类型检查错误。 GraphQL,打字稿。表示的主要内容,如果未能解决你的问题,请参考以下文章
如何根据检索到的列类型为 bind_param 动态分配正确的类型?
这个错误说明了啥?类型“ParsedQs”不可分配给类型“字符串”
为啥自定义子查询类型不能分配给 GraphQLObjectType?