具有联合类型的GraphQL字段返回null

时间:2019-07-19 05:58:03

标签: javascript typescript graphql

我正在尝试使用GraphQl为两个字段设置联合类型,这些字段可以包含String或Number。并且我设置了一个名为“ FloorType”的联合类型,其中包含以下内容:

union FloorType = IntBox | StringBox

在这里定义了IntBox和Stringbox这两种类型:

type IntBox {
  value: Int
}

type StringBox {
  stringName: String
}

我已经设置了解析器方法:

const resolvers: IResolvers = {
  IntBox: {
    __isTypeOf(obj: number, context: any, info: any) {
      console.log('returned obj', obj);
      return obj;
    },
  },
  FloorType: {
    __resolveType(obj: any, context: any, info: any) {
      if (typeof obj === 'string') {
        return 'StringBox';
      }

      if (typeof obj === 'number') {
        console.log('number', obj);
        return 'IntBox';
      }
    },
  },
};

但是,无论我尝试了什么,查询要么返回“ null”,要么抛出一个错误。 在这种情况下,它会检查该字段是否为数字并在控制台日志中显示该数字,但在编写查询时它不会在操场上显示。

我已经设置了resolver方法。但是看来它还没有工作。

apart.resolver.ts

const resolvers: IResolvers = {
  IntBox: {
    __isTypeOf(obj: number, context: any, info: any) {
      console.log('returned obj', obj);
      return obj;
    },
  },
  FloorType: {
    __resolveType(obj: any, context: any, info: any) {
      if (typeof obj === 'string') {
        return 'StringBox';
      }

      if (typeof obj === 'number') {
        console.log('number', obj);
        return 'IntBox';
      }
    },
  },
};

在GraphQl游乐场中使用以下参数进行查询:

  aparts(page:1, newest: false) {
   name
    price
    currency
    squares
    floor {
    ... on IntBox {
        value
    }
    }
    created
    link
    _id
  }

}

向我返回以下内容:

 "floor": {
      "value": null
    },

我希望floor的输出例如是: 地板{   “值”:5 }

谢谢!

0 个答案:

没有答案