我正在使用graphql-codegen从graphql模式生成打字稿类型。我正在尝试使用动态字段创建一个片段。
schema.ts
这是graphql-codegen
生成的类型。
/** User Type */
export type UserType = {
__typename?: 'UserType';
id: Scalars['ID'];
avatar: Scalars['String'];
email: Scalars['String'];
name: Scalars['String'];
showPostsInFeed: Scalars['Boolean'];
username: Scalars['String'];
};
user.model.ts
我在整个应用程序中都使用这些接口来进行验证和一致性。
export interface IUserBase {
id: string;
avatar: string;
name: string;
username: string;
}
export interface IUserPost extends IUserBase {
showPostsInFeed: boolean;
}
export interface IUserProfile extends IUserBase,IUserPost {
email: string;
}
show.ts
这是用于生成的文件。在这里,我想使用现有的IUserPost
和IUserProfile
接口创建一个带有动态字段的片段,以便重用这些字段,并避免重复在片段中一一重复它们。
import gql from 'graphql-tag';
import { keys } from 'ts-transformer-keys';
import { IUserProfile,IUserPost } from '../../user.model';
const keysUserPofile = keys<IUserProfile>(); //Get all interface keys
const keysUserPost = keys<IUserPost>(); //Get all interface keys
//Fragments
export const fragments = {
userProfile: gql`
fragment UserProfile on UserType {
${keysUserPofile.join('\n')} //Interpolation
}
`,userPost: gql`
fragment UserPost on UserType {
${keysUserPost.join('\n')} //Interpolation
}
`
};
//Queries
export const userProfileQuery = gql`
query UserProfileQuey($id: String!) {
showUser(id: $id) {
...UserProfile
}
}
`;
export const userPostQuery = gql`
query UserPostQuey($id: String!) {
showUser(id: $id) {
...UserPost
}
}
`;
当我尝试使用插值传递这些字段时,出现此错误。
$ npm run generate
> gogofans-ui@0.0.0 generate C:\Development\GogoFans\gogofans-ui
> graphql-codegen --config codegen.yml
√ Parse configuration
> Generate outputs
> Generate src/app/core/graphql/schema.ts
√ Load GraphQL schemas
× Load GraphQL documents
→ Syntax Error: Expected Name,found "}".
Generate
Found 1 error
× C:/Development/GogoFans/gogofans-ui/src/app/users/graphql/fragments/show.ts
GraphQLError: Syntax Error: Expected Name,found "}".
at syntaxError (C:\Development\GogoFans\gogofans-ui\node_modules\graphql\error\syntaxError.js:15:10)
at Parser.expectToken (C:\Development\GogoFans\gogofans-ui\node_modules\graphql\language\parser.js:1423:40)
at Parser.parseName (C:\Development\GogoFans\gogofans-ui\node_modules\graphql\language\parser.js:92:22)
at Parser.parseField (C:\Development\GogoFans\gogofans-ui\node_modules\graphql\language\parser.js:289:28)
at Parser.parseSelection (C:\Development\GogoFans\gogofans-ui\node_modules\graphql\language\parser.js:278:81)
at Parser.many (C:\Development\GogoFans\gogofans-ui\node_modules\graphql\language\parser.js:1537:26)
at Parser.parseSelectionSet (C:\Development\GogoFans\gogofans-ui\node_modules\graphql\language\parser.js:265:24)
at Parser.parseFragmentDefinition (C:\Development\GogoFans\gogofans-ui\node_modules\graphql\language\parser.js:410:26)
at Parser.parseDefinition (C:\Development\GogoFans\gogofans-ui\node_modules\graphql\language\parser.js:134:23)
at Parser.many (C:\Development\GogoFans\gogofans-ui\node_modules\graphql\language\parser.js:1537:26)
at Parser.parseDocument (C:\Development\GogoFans\gogofans-ui\node_modules\graphql\language\parser.js:109:25)
at Object.parse (C:\Development\GogoFans\gogofans-ui\node_modules\graphql\language\parser.js:36:17)
at Object.parseGraphQLSDL (C:\Development\GogoFans\gogofans-ui\node_modules\@graphql-tools\utils\index.cjs.js:601:28)
at parseSDL (C:\Development\GogoFans\gogofans-ui\node_modules\@graphql-tools\code-file-loader\index.cjs.js:239:18)
at CodeFileLoader.load (C:\Development\GogoFans\gogofans-ui\node_modules\@graphql-tools\code-file-loader\index.cjs.js:173:28)
at async loadFile (C:\Development\GogoFans\gogofans-ui\node_modules\@graphql-tools\load\index.cjs.js:48:24)
GraphQLError: Syntax Error: Expected Name,found "}".
at syntaxError (C:\Development\GogoFans\gogofans-ui\node_modules\graphql\error\syntaxError.js:15:10)
at Parser.expectToken (C:\Development\GogoFans\gogofans-ui\node_modules\graphql\language\parser.js:1423:40)
at Parser.parseName (C:\Development\GogoFans\gogofans-ui\node_modules\graphql\language\parser.js:92:22)
at Parser.parseField (C:\Development\GogoFans\gogofans-ui\node_modules\graphql\language\parser.js:289:28)
at Parser.parseSelection (C:\Development\GogoFans\gogofans-ui\node_modules\graphql\language\parser.js:278:81)
at Parser.many (C:\Development\GogoFans\gogofans-ui\node_modules\graphql\language\parser.js:1537:26)
at Parser.parseSelectionSet (C:\Development\GogoFans\gogofans-ui\node_modules\graphql\language\parser.js:265:24)
at Parser.parseFragmentDefinition (C:\Development\GogoFans\gogofans-ui\node_modules\graphql\language\parser.js:410:26)
at Parser.parseDefinition (C:\Development\GogoFans\gogofans-ui\node_modules\graphql\language\parser.js:134:23)
at Parser.many (C:\Development\GogoFans\gogofans-ui\node_modules\graphql\language\parser.js:1537:26)
at Parser.parseDocument (C:\Development\GogoFans\gogofans-ui\node_modules\graphql\language\parser.js:109:25)
at Object.parse (C:\Development\GogoFans\gogofans-ui\node_modules\graphql\language\parser.js:36:17)
at Object.parseGraphQLSDL (C:\Development\GogoFans\gogofans-ui\node_modules\@graphql-tools\utils\index.cjs.js:601:28)
at parseSDL (C:\Development\GogoFans\gogofans-ui\node_modules\@graphql-tools\code-file-loader\index.cjs.js:239:18)
at CodeFileLoader.load (C:\Development\GogoFans\gogofans-ui\node_modules\@graphql-tools\code-file-loader\index.cjs.js:173:28)
at async loadFile (C:\Development\GogoFans\gogofans-ui\node_modules\@graphql-tools\load\index.cjs.js:48:24)
Something went wrong
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! gogofans-ui@0.0.0 generate: `graphql-codegen --config codegen.yml`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the gogofans-ui@0.0.0 generate script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
npm ERR! A complete log of this run can be found in:
npm ERR! C:\Users\Fidel\AppData\Roaming\npm-cache\_logs\2020-07-06T07_01_25_424Z-debug.log