GraphQl打字稿类查询/突变?

时间:2019-07-08 22:53:22

标签: javascript typescript graphql

是否有可能在打字稿类之外使用反射来创建graphql查询呢?

export class GraphQlMagicGenerator {

    fetch(query: string, args: any) {

    }
}
export class PatientsQuery extends GraphQlMagicGenerator {
    constructor(patientId: number) {
        super()

        super.fetch("patient", {
            id: patientId
        })
    }

id:()=> number
name:()=> string
age:()=> number
}

// ^ behind the scenes generates a query for patient with an id argument and fills in id, name and age

2 个答案:

答案 0 :(得分:0)

不要这样做。因为

  1. 每个查询都需要开发一个类来匹配它。 class 会影响目标代码的大小。

  2. GraphQL 具有高度的灵活性和动态性,它的查询参数决定了需要查询哪些字段。即使是同一个查询,不同的参数也会导致不同的返回类型。如果像这样尝试为每个查询手动定义返回类型会特别累人。

  3. 不同查询对应的数据类型包含一些相同的信息,代码中会有很多冗余。

我推荐我的框架,它为 GraphQL Client 带来了神奇的开发体验。

https://github.com/babyfish-ct/graphql-ts-client

  1. 支持代码生成器从服务器下载架构信息并生成客户端 TypeScript 文件。它不会为没有逻辑的功能生成“类”,因此不会影响目标代码的大小。

  2. 它允许你编写强类型的 GraphQL 请求,不仅是参数,还有一个强类型的树结构来描述应该查询哪些字段。

  3. 与其他类似框架不同,它不需要用户预先定义所有可能的查询,对于每一个具体的查询,可以根据强类型请求推断返回数据的类型强>.

喜欢这个 enter image description here

答案 1 :(得分:-1)

您应该做相反的事情:在.graphql中定义架构,然后从那里对TypeScript类型进行代码生成。我正在使用gql2ts(尽管还有其他人。)然后在构建阶段创建脚本。

您也可以自定义代码生成部分,以适合您团队的特定样式。例如,我删除了命名空间,覆盖了enum的生成,并将生成的类型都标记为readonly。但是您的架构您的API,因此它应该定义您的类型。