【发布时间】: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的同一件事搏斗
标签: node.js typescript graphql apollo-server apollo-federation