GraphQL error: Right-hand side of 'instanceof' is not callable

GraphQL error: Right-hand side of 'instanceof' is not callable

我正在定义以下 GraphQL 类型:

interface.js

import { 
    GraphQLInterfaceType,
    GraphQLNonNull, 
    GraphQLID 
} from 'graphql';


const NodeInterface = new GraphQLInterfaceType({
    name: 'Node',
    fields: {
        id: {
            type: new GraphQLNonNull(GraphQLID)
        }
    }
});

export default NodeInterface;

type.js

 import { 
    GraphQLObjectType, 
    GraphQLInputObjectType,
    GraphQLNonNull,
    GraphQLID,
    GraphQLList,
    GraphQLString, 
    GraphQLInt, 
    GraphQLBoolean 
} from 'graphql';

 import NodeInterface from '../interfaces';

 import UserModel from '../../models/User';

 const fields = {
    id: {
        type: new GraphQLNonNull(GraphQLID)
    },
    name: {
        type: GraphQLString
    },
    users: {
        type: new GraphQLList(UserType),
        resolve(company) {
            const { _id } = company;
            return UserModel.find({ companyId: _id }).exec();
        }
    }
 };

 export const CompanyType = new GraphQLObjectType({
    name: 'Company',
    description: 'Company',
    interfaces: [NodeInterface],
    isTypeOf: value => value instanceof CompanyType, <<<< ERROR HERE
    fields: fields
 })

当 运行 在节点上查询时,我收到以下错误:

query {
  node(id:"598360ab8713621aac426e88") {
    ... on Company {
            id
            name
        }
     }
  }

结果:

{
  "errors": [
    {
      "message": "Right-hand side of 'instanceof' is not callable",
      "locations": [
        {
          "line": 2,
          "column": 3
        }
      ],
      "path": [
        "node"
      ]
    }
  ],
  "data": {
    "node": null
  }
}

问题出在 Company 类型的 isTypeOf 处,但我不知道为什么它无法计算创建类型的实例。

每当 GraphQL 解析类型时,它都会传递某种业务对象以供使用。它使用该业务对象来解析类型上的各个字段。您可以将 isTypeOf 方法视为一种检查,以确定传入的业务对象是否应解析为该特定类型。

在您的应用程序中,当您进行查询时,您将从数据库中获取数据并将其传递给类型解析器。您的 isTypeOf 方法需要做的是回答以下问题:此数据是否代表我要解析的类型?

如果您使用的 ORM returns 是 CompanyModel 的一个实例,那么 isTypeOf 方法可以简单地是 value instanceof CompanyModel.

如果您要取回的对象不是从这样的描述性原型继承的,则可以实施任何其他必要的检查。例如,如果您的数据库行包含一个 typename 字段,您可以检查它。

您可以看到 isTypeOf here 的正确用法。