【问题标题】:What strict typescript type to return from graphql resolver using eslint?使用 eslint 从 graphql 解析器返回什么严格的打字稿类型?
【发布时间】:2020-11-28 11:42:27
【问题描述】:

回购

https://github.com/inspiraller/apollo-typescript

代码运行,但 Eslint 打字稿抱怨。

我收到 eslint 错误:

 Query: {
    players: () => players
  }

function.eslint@typescript-eslint/explicit-module-boundary-types 上缺少返回类型

index.ts

import { ApolloServer } from 'apollo-server';
import typeDefs from './schema';
import resolvers from './resolvers';

const init = () => {
  const server: ApolloServer = new ApolloServer({
    typeDefs,
    resolvers
  });

  server.listen().then((props: { url: string }) => {
    const { url } = props;
    console.log(`Server ready at ${url}`);
  });
};

init();

schema.ts

import { gql } from 'apollo-server';

const typeDefs = gql`
  type Player {
    id: String
    name: String
  }
  type Query {
    players: [Player]!
  }

  input PlayerInput {
    name: String
  }

  type Mutation {
    addPlayer(player: PlayerInput!): Player
  }
`;

export default typeDefs;

解析器.ts

interface shapePlayer {
  id: string;
  name: string;
}
const players: Array<shapePlayer> = [
  {
    id: 'alpha',
    name: 'terry'
  },
  {
    id: 'beta',
    name: 'pc'
  }
];

interface shapeResolver {
  Query: {
    players: () => Array<shapePlayer> | null | undefined | void;
  };
}

const resolvers: shapeResolver = {
  Query: {
    players: () => players
  }
};
export default resolvers;

我发现了许多可供使用的替代库,即 typegraphql,这似乎是减少样板打字稿类型的好解决方案,但它没有提供查询或突变的严格返回类型的答案。

推荐任何帮助。谢谢

【问题讨论】:

    标签: typescript graphql eslint apollo-server


    【解决方案1】:

    也许有点晚了,但希望它也能帮助别人。

    我找到了使用graphql-code-generator从您的架构中自动获取 TS 类型的最佳方法

    如需快速回复,请粘贴您的架构here


    快速设置打字稿:

    1. 安装

    npm i -D @graphql-codegen/cli @graphql-codegen/typescript @graphql-codegen/typescript-resolvers

    它将安装 cli 和 typescript + typescript-resolvers 插件。

    1. 在您的根目录下创建 codegen.yml 并输入:
    overwrite: true
    schema: 'http://localhost:3500/graphql'
    generates:
      src/utils/codegen/graphql.ts:
        plugins:
          - 'typescript'
          - 'typescript-resolvers'
    
    1. 执行命令:

    graphql-codegen --config codegen.yml --watch src/**/*.ts

    1. 现在您可以执行以下操作:
    // Import the types of your generated ts file.
    import { MutationResolvers, QueryResolvers, Resolvers } from '@/utils/codegen/graphql'
    
    const Query: QueryResolvers = {
      players: () => players
    }
    
    const Mutation: MutationResolvers = {
      updatePlayer: () => player
    }
    
    const resolvers: Resolvers = {
      Query,
      Mutation
    };
    export default resolvers;
    

    截图示例:

    intellisense and autocomplete

    proper validation

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-10-21
      • 2023-01-09
      • 2021-12-02
      • 1970-01-01
      • 2019-07-15
      • 2023-01-05
      • 2020-06-29
      相关资源
      最近更新 更多