类型 'IResolvers<any, any>' 不可分配给类型 'GraphQLResolverMap<any>'。索引签名不兼容

Posted

技术标签:

【中文标题】类型 \'IResolvers<any, any>\' 不可分配给类型 \'GraphQLResolverMap<any>\'。索引签名不兼容【英文标题】:Type 'IResolvers<any, any>' is not assignable to type 'GraphQLResolverMap<any>'. Index signatures are incompatible类型 'IResolvers<any, any>' 不可分配给类型 'GraphQLResolverMap<any>'。索引签名不兼容 【发布时间】:2020-11-05 20:24:47 【问题描述】:

我按照Apollo Federation: Implementing services的指南进行操作

代码在这里:

import  ApolloServer, gql, IResolvers  from 'apollo-server';
import  buildFederatedSchema  from '@apollo/federation';
import faker from 'faker';

const MemoryDB = 
  users: [
     id: 1, name: faker.name.findName() ,
     id: 2, name: faker.name.findName() ,
  ],
;

const typeDefs = gql`
  type Query 
    userById(id: ID!): User
  
  type User @key(fields: "id") 
    id: ID!
    name: String!
  
`;

const resolvers: IResolvers = 
  Query: 
    me: (_,  id ,  db ) => 
      return db.users.find((u) => u.id === +id);
    ,
  ,
  User: 
    __resolveReference(user,  db ) 
      return db.users.find((u) => u.id === user.id);
    ,
  ,
;

const server = new ApolloServer(
  schema: buildFederatedSchema([ typeDefs, resolvers ]), // TSC throw error here
);

TSC 抛出类型错误:

类型 'IResolvers' 不可分配给类型 'GraphQLResolverMap'。 索引签名不兼容。 键入'(() => 任何) | GraphQLScalarType | IEnumResolver | IResolverObject | IResolverOptions' 不可分配给类型 'GraphQLScalarType | [枚举值:字符串]:字符串 |数字; | [fieldName: string]: GraphQLFieldResolver | 需要?:字符串 |不明确的;解决:GraphQLFieldResolver<...>; ; '。 类型 '() => any' 不可分配给类型 'GraphQLScalarType | [枚举值:字符串]:字符串 |数字; | [fieldName: string]: GraphQLFieldResolver | 需要?:字符串 |不明确的;解决:GraphQLFieldResolver<...>; ; '。 类型 '() => any' 不可分配给类型 ' [fieldName: string]: GraphQLFieldResolver | 需要?:字符串 |不明确的;解析:GraphQLFieldResolver; ; '。 '() => any'.ts(2322) 类型中缺少索引签名

软件包版本:

"apollo-server": "^2.12.0",
"@apollo/federation": "^0.17.0",

好像IResolvers接口不兼容,但是GraphQLResolverMap接口没有暴露,所以无法导入使用。我不想将解析器的类型转换为 any 类型。这是一个错误吗?

更新

apollo-server更新为"apollo-server": "^2.15.1",后问题依然存在

【问题讨论】:

嗨,你有想过这个吗?我正在与apollo-server: 2.24.0@apollo/federation: 0.25.0 的同一件事搏斗 【参考方案1】:

相信GraphQLResolverMap在别处,试试:

import  GraphQLResolverMap  from 'apollo-graphql';

然后使用它代替 IResolvers。

【讨论】:

以上是关于类型 'IResolvers<any, any>' 不可分配给类型 'GraphQLResolverMap<any>'。索引签名不兼容的主要内容,如果未能解决你的问题,请参考以下文章

无法从 graphql-tools 导入 IResolvers

类型 '() => Observable<any>' 不可分配给类型 '() => Observable<any>'

strictFunctionTypes 限制泛型类型

NestJS RedisIoAdapter 不可分配给 WebSocketAdapter<any, any, any> 类型的参数

Swift开发第九篇——Any和AnyObject&typealias和泛型接口

“MonoTypeOperatorFunction<any>”类型的参数不可分配给“UnaryFunction<Obs​​ervable<any>, Observable