在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
开源软件名称(OpenSource Name):dangcuuson/graphql-schema-typescript开源软件地址(OpenSource Url):https://github.com/dangcuuson/graphql-schema-typescript开源编程语言(OpenSource Language):TypeScript 90.0%开源软件介绍(OpenSource Introduction):A GraphQL utility to generate Typescript from Schema DefinitionThis project is inspired by Apollo-codegen. Currently apollo-codegen only generate TypeScripts for GraphQL Client. The shape of the generated type is based on the client's query strings. This module aim to do the Server counterpart: from a Schema Definition, generate the types to make it type-safed when developing GraphQL server (mainly resolvers) Compatibility
FeaturesGenerate Typescript from Schema Definition (1-1 mapping from GQL type to TypeScript)Convert GraphQL description into JSDoc, include deprecated directiveGenerate TypeScripts to support writing resolvers@liyikun)VSCode extension (credit toUsageimport { generateTypeScriptTypes } from 'graphql-schema-typescript';
generateTypeScriptTypes(schema, outputPath, options)
.then(() => {
console.log('DONE');
process.exit(0);
})
.catch(err =>{
console.error(err);
process.exit(1);
}); You can then bootstrap this script on your dev server, or use something like ts-node to execute it directly
CLIs
Type ResolversThe file generated will have some types that can make it type-safed when writing resolver:
For example, if you schema is like this: schema {
query: RootQuery
}
type RootQuery {
Users(input: UserFilter): [User!]!
# ... some more fields here
}
input UserFilter {
username: [String]
}
type User {
firstName: String!
# ... some more fields here
}
Then the tools will generate TypeScripts like this: /**
* This interface define the shape of your resolver
* Note that this type is designed to be compatible with graphql-tools resolvers
* However, you can still use other generated interfaces to make your resolver type-safed
*/
export interface GQLResolver {
RootQuery?: GQLRootQueryTypeResolver;
User?: GQLUserTypeResolver;
}
export interface GQLRootQueryTypeResolver {
Users?: RootQueryToUsersResolver;
}
export interface RootQueryToUsersArgs {
Users?: GQLUserFilter;
}
export interface RootQueryToUsersResolver<TParent = any, TResult = any> {
(parent: TParent, args: RootQueryToUsersArgs, context: any, info: GraphQLResolveInfo): TResult;
} In this example, if you are not using graphql-tools,
you can still use Default TParent & TResultIn version 1.2.2, a strategy for generating default TParent and TResult has been implemented
by setting If both options are set to true, the resolver will be generated as follow: // smartTParent: true
// smartTResult: true
// TParent is undefined because it uses the value of 'rootValueType' in options
export interface RootQueryToUsersResolver<TParent = undefined, TResult = Array<GQLUser> {
(parent: TParent, args: RootQueryToUsersArgs, context: any, info: GraphQLResolveInfo): TResult;
} However, since // smartTParent: true
// smartTResult: true
// asyncResult: true
export interface RootQueryToUsersResolver<TParent = undefined, TResult = Array<GQLUser> {
(parent: TParent, args: RootQueryToUsersArgs, context: any, info: GraphQLResolveInfo): Promise<TResult> | TResult; // the different is here
} // in v1.12.11, asyncResult also accept string value 'always',
// which will make returns value of resolve functions to be `Promise<TResult>`,
// due to an issue with VSCode that not showing auto completion when returns is a mix of `T | Promise<T>` (see [#17](https://github.com/dangcuuson/graphql-schema-typescript/issues/17))
// smartTParent: true
// smartTResult: true
// asyncResult: 'always'
export interface RootQueryToUsersResolver<TParent = undefined, TResult = Array<GQLUser> {
(parent: TParent, args: RootQueryToUsersArgs, context: any, info: GraphQLResolveInfo): Promise<TResult>; // the different is here |
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论