无法在 typescript 中配置 Apolloserver 的数据源

Posted

技术标签:

【中文标题】无法在 typescript 中配置 Apolloserver 的数据源【英文标题】:Can not configure Apolloserver 's datasources in typescript 【发布时间】:2020-04-05 10:28:14 【问题描述】:

我对 TypeScript 和 Apollo 还是很陌生。我第一次尝试设置我的 Apollo 服务器,但我不断收到有关“数据源”的错误消息。我不确定这意味着什么以及如何解决它。

import   ApolloServer, gql  from 'apollo-server';
//...
const  RESTDataSource  = require('apollo-datasource-rest');

class MoviesAPI extends RESTDataSource 
  constructor() 
    super();
    this.baseURL = 'https://movies-api.example.com/';
  

  async getMovie(id) 
    return this.get(`movies/$id`);
  

  async getMostViewedMovies(limit = 10) 
    const data = await this.get('movies', 
      per_page: limit,
      order_by: 'most_viewed',
    );
    return data.results;
  



const SERVERCONFIG = 
  'typeDefs': gql(typeDefs) ,
  resolvers,
  dataSources: ()=> (
      MoviesAPI:  new MoviesAPI(),
    ) ,
;

const server = new ApolloServer(SERVERCONFIG);

我收到以下错误:

Type ' 'typeDefs': DocumentNode; resolvers:  Query: ; ; dataSources: () =>  MoviesAPI: MoviesAPI; ; ' is not assignable to type 'ApolloServerExpressConfig'.
    The types returned by 'dataSources()' are incompatible between these types.
      Type ' MoviesAPI: MoviesAPI; ' is not assignable to type 'DataSources<object>'.
        Property 'MoviesAPI' is incompatible with index signature.
          Type 'MoviesAPI' has no properties in common with type 'DataSource<object>'.

如果我执行以下操作,我可以让错误消失:dataSources: ()=> (...MoviesAPI) 但我认为这不能解决问题...

有人知道这是什么原因吗?

【问题讨论】:

【参考方案1】:

改变

const  RESTDataSource  = require('apollo-datasource-rest');

import  RESTDataSource  from 'apollo-datasource-rest';

这应该会为您解决问题。

【讨论】:

以上是关于无法在 typescript 中配置 Apolloserver 的数据源的主要内容,如果未能解决你的问题,请参考以下文章

如何在 TypeScript 中使用 Apollo Client 自定义钩子?

使用 Apollo 在 TypeScript 中填充常量时,对象的类型为“未知”.Vetur(2571)

NextJS/Typescript/Apollo 错误;类型上不存在属性

使用 react-apollo,如何使用 TypeScript 在同一个组件中定义 2 个突变?

如何使用 Apollo 工具为查询生成 Typescript 类型,包括 Apollo @client 和 @rest 指令?

如何在 Firestore Cloud Functions 上使用 Apollo Server GraphQL 在 TypeScript 中处理身份验证