首页 > 解决方案 > 如何在 GraphQL 模式中使用“十进制”作为字段类型?

问题描述

我想Decimal在我的 GraphGL 模式中用作纬度和经度字段的类型。但是 GraphQL 只提供FloatInt。有没有解决这个问题的包?

标签: node.jsexpressgraphqlapollo-server

解决方案


我查看了这个模块的源代码可以想出这个:




///  I M P O R T

import Big from "big.js";
import { GraphQLScalarType, Kind } from "graphql";



///  E X P O R T

export default new GraphQLScalarType({
  name: "Decimal",
  description: "The `Decimal` scalar type to represent currency values",

  serialize(value) {
    return new Big(value);
  },

  parseLiteral(ast) {
    if (ast.kind !== Kind.STRING) {
      // @ts-ignore | TS2339
      throw new TypeError(`${String(ast.value)} is not a valid decimal value.`);
    }

    return Big(ast.value);
  },

  parseValue(value) {
    return Big(value);
  }
});

然后,我添加对解析器的引用,这样我就可以添加Decimal到我的 SDL 代码中。


推荐阅读