Как я могу обрабатывать длинные Int с GraphQL? - PullRequest
1 голос
/ 14 июля 2020

Как вы знаете, GraphQL не имеет такого типа данных, как long int. Таким образом, если число является большим, например 10000000000, оно выдает такую ​​ошибку: Int cannot represent non 32-bit signed integer value: 1000000000000

Для этого я знаю два решения:

  1. Используйте скаляры.
import { GraphQLScalarType } from 'graphql';
import { makeExecutableSchema } from '@graphql-tools/schema';

const myCustomScalarType = new GraphQLScalarType({
  name: 'MyCustomScalar',
  description: 'Description of my custom scalar type',
  serialize(value) {
    let result;
    return result;
  },
  parseValue(value) {
    let result;
    return result;
  },
  parseLiteral(ast) {
    switch (ast.kind) {
    }
  }
});

const schemaString = `

scalar MyCustomScalar

type Foo {
  aField: MyCustomScalar
}

type Query {
  foo: Foo
}

`;

const resolverFunctions = {
  MyCustomScalar: myCustomScalarType
};

const jsSchema = makeExecutableSchema({
  typeDefs: schemaString,
  resolvers: resolverFunctions,
});
Используйте пакет apollo-type-bigint .

Оба они преобразуют большой int в string, и это не идеальное решение.

Пожалуйста, если вы знаете, помогите мне. Как передать большое int как число, а не строку?

Ответы [ 2 ]

1 голос
/ 15 июля 2020

Да, нет такой концепции, как bigInt в graphQL

Вы можете попробовать один из них,

  1. установите тип как Float вместо Int он будет обрабатывать все большие значения int, а также отправлять как number.

  2. , если тип данных не имеет значения, вы также можете указать тип данных BigInt. он также будет обрабатывать большие int, но преобразует ваши значения в string

  3. Снова тип данных не является для вас проблемой, тогда вы можете выбрать npm для обработки вашего случая

npm ссылки:

https://www.npmjs.com/package/apollo-type-bigint

https://www.npmjs.com/package/graphql-bigint

https://www.npmjs.com/package/graphql-type-bigint

1 голос
/ 14 июля 2020

В этом случае я бы рекомендовал использовать пакет graphql-bigint . Эта реализация дает вам 53-битные целые числа. Любое целочисленное число выше 52 бит будет иметь усеченное меньшее значение. Так что, если вам нужно более 52 бит, использование строк будет безопаснее.

...