首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从GraphQL - graphql生成Dart

如何从GraphQL - graphql生成Dart
EN

Stack Overflow用户
提问于 2020-06-26 08:03:35
回答 1查看 3.6K关注 0票数 4

如何将简单的对象类型1(如接口/类)从GraphQL模式定义生成到Dart?

  • 动机
    • 真理的一个来源: GraphQL模式
    • 所有普通的简单类型都从GraphQL生成为多语言
      • 在我们的例子中,类型记录和Dart

  • 到目前为止我们已经尝试过的
    • 所有与2相关的解决方案--偶数叉--都不做简单的类型。

  • 我们知道的可能的DIY方法
    • GraphQL代码生成器3
    • quicktype类似的替代品4

将GraphQL转换为类型记录示例

给定这个模式定义

代码语言:javascript
复制
type Person {
    age: Int
    name: String!
}

运行此脚本

代码语言:javascript
复制
import { GraphQLDefinitionsFactory } from '@nestjs/graphql';
import { join } from 'path';


const definitionsFactory = new GraphQLDefinitionsFactory();

definitionsFactory.generate({
    typePaths: ['./**/*.graphql'],
    path: join(process.cwd(), './class.ts'),
    outputAs: 'class'
});

definitionsFactory.generate({
    typePaths: ['./src/**/*.graphql'],
    path: join(process.cwd(), './interface.ts'),
    outputAs: 'interface'
});

输出

代码语言:javascript
复制
export interface Person {
    age?: number;
    name: string;
}
代码语言:javascript
复制
export class Person {
    age?: number;
    name: string;
}

1:简单对象类型应该是简单的普通对象类型,不需要注释、编码和解码逻辑等2:https://github.com/gql-dart/gql

3:https://graphql-code-generator.com

4:https://app.quicktype.io

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-07-06 04:12:52

我个人曾尝试使用阿耳特弥斯,或者希望阿波罗能够扩展业务,但@Ryosukedart是直截了当的。

如果您已经有了一个已经启动并运行模式的GraphQL端点,您只需要设置它的graphql_config.yaml,例如:

代码语言:javascript
复制
package_name: example
graphql_endpoint: http://example.com/graphql
models_directory_path: lib/graphql/models/

给定模式定义

代码语言:javascript
复制
type Person {
    age: Int
    name: String!
}

.dart输出

代码语言:javascript
复制
class Person{
  int age;
  String name;
  Person({
    this.age,this.name
  });

  Person.fromJson(Map<String, dynamic> json){
    age = json['age'];
    name = json['name'];
  }

  Map toJson(){
    Map _data = {};
    _data['age'] = age;
    _data['name'] = name;
    return _data;
  }
}

使用附加选项type_override,您可以根据自己的喜好设置自定义标量类型。

编辑:

现在有一个扩充版作为按下。在没有导入路径冲突的情况下,通过选择退出选项lib/dynamic_import_path: false之外生成它们。

type_override键也不再需要用小写显式编写。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62590497

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档