GraphQL с Typescript: ошибка типа преобразователя - PullRequest
0 голосов
/ 17 июня 2020

Используя apollo-graphql, я создал тип "account" и сопутствующий преобразователь, который использует graphql-iso-date . Конфигурация приводит к следующим ошибкам, какие-либо идеи по поводу причины и решения?

В приведенном ниже коде typedef объединены в коллекцию из определенных модулей c typedef.

Тип '{Дата: GraphQLScalarType; DateTime: GraphQLScalarType; Время: GraphQLScalarType; } | {Запрос: AccountQueryResolver; } 'нельзя присвоить типу' IResolvers | IResolvers [] | undefined '.

Тип' {Date: GraphQLScalarType; DateTime: GraphQLScalarType; Время: GraphQLScalarType; } 'нельзя присвоить типу' IResolvers | IResolvers [] | undefined '.

Тип' {Дата: GraphQLScalarType; DateTime: GraphQLScalarType; Время: GraphQLScalarType; } 'не может быть назначен типу' IResolvers '. Свойство «Дата» несовместимо с индексной подписью

Тип «GraphQLScalarType» не может быть присвоен типу »(() => любой) | GraphQLScalarType | IEnumResolver | IResolverObject | IResolverOptions '.

Тип GraphQLScalarType нельзя присвоить типу IResolverObject.
В типе GraphQLScalarType отсутствует подпись индекса.


Коллекция TypeDefs

import CustomScalarTypeDefs from "./custom";
import QueryTypeDefs from "./query";
import AccountTypeDefs from "./account";

const TypeDefs = [CustomScalarTypeDefs, QueryTypeDefs, AccountTypeDefs];

export default TypeDefs;

Custom Scalar TypeDefs

import { gql } from "apollo-server-express";

const customScalarTypeDefs = gql`
  scalar Date
  scalar DateTime
  scalar Time
`;

export default customScalarTypeDefs;

Query TypeDefs

import { gql } from "apollo-server-express";

const QueryTypeDefs = gql`
  type Query {
    account(id: String!): Account
  }
`;

export default QueryTypeDefs;

Custom Scalar Resolver

import { GraphQLDate, GraphQLDateTime, GraphQLTime } from "graphql-iso-date";

const CustomScalarResolver = {
  Date: GraphQLDate,
  DateTime: GraphQLDateTime,
  Time: GraphQLTime
};

export default CustomScalarResolver;

Account Resolver

import { QueryById } from "./signatures";
import Account, { AccountModel, AccountPayload } from "../../models/account";

interface AccountQueryResolver {
  account: (_: never, req: QueryById) => Promise<AccountModel | null>;
  createAccount: (
    parent: Account | null,
    { entity, name }: AccountPayload
  ) => Promise<AccountModel | null>;
}

const accountResolver: AccountQueryResolver = {
  account: (_, { id }): Promise<AccountModel | null> => {
    return Account.findOne({ _id: id }).exec();
  },
  createAccount: (_, { entity, name }): Promise<AccountModel | null> => {
    return Account.create({ entity, name });
  }
};

export default accountResolver;
...