【发布时间】:2020-11-26 06:30:27
【问题描述】:
我在一个带有 Apollo 客户端的项目中使用 GraphQL,当我使用 writeFragment 时,我必须将对象形状与片段定义相匹配。我现在正在手动执行此操作,但这会导致大量不必要的代码,并且在片段定义更改时会使事情变得脆弱。
我想从gql 片段生成一个空的JavaScript 对象。例如
export const instructorFragment = gql`
fragment InstructorDetails on InstructorProfile {
id
user_id
picture_url
title
bio
tags {
...TagDetails
}
}
${tagFragment}
`;
export const tagFragment = gql`
fragment TagDetails on Tag {
id
label
}
`;
应该生成类似的东西:
{
id: null,
user_id: null,
picture_url: null,
title: null,
bio: null,
tags: {
id: null,
label: null
}
}
片段对象有足够的信息来执行此操作,但尽管谷歌搜索了很多,但我还是找不到库。
- 选项 1 是使用已经存在的东西
- 选项 2 是编写我自己的函数
- 选项 3 是:
我正在使用GraphQL Code Generator 从我的代码中生成 TypeScript 定义,所以我有这样的代码:
export type InstructorProfile = {
__typename?: 'InstructorProfile';
id: Scalars['ID'];
user_id?: Maybe<Scalars['ID']>;
picture_url?: Maybe<Scalars['String']>;
title?: Maybe<Scalars['String']>;
bio?: Maybe<Scalars['String']>;
tags?: Maybe<Array<Maybe<Tag>>>;
};
export type Tag = {
__typename?: 'Tag';
id: Scalars['ID'];
label: Scalars['String'];
};
有没有办法把它变成我想要的?
【问题讨论】:
-
您可以从值创建类型。你不能从类型中创建值。
-
我不确定我是否完全理解您在做什么,但是,
TypeScript是编译时的事情,当您尝试运行代码时,它就是JavaScript。正如我们已经知道的那样,JavaScript没有类型的概念。因此,运行代码并基于TypeScript类型生成一些东西的想法实际上行不通。
标签: javascript typescript graphql react-apollo