Создать JavaScript пустой объект из определения типа TypeScript или определения фрагмента GraphQL - PullRequest
8 голосов
/ 06 августа 2020

Я использую GraphQL в проекте с клиентом Apollo, и когда я использую writeFragment, мне нужно сопоставить форму объекта с определением фрагмента. Я делаю это вручную прямо сейчас, но это приводит к появлению большого количества ненужного кода и делает вещи fr agile на случай изменения определения фрагмента.

Я хотел бы создать пустой JavaScript объект из фрагмента gql. например,

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
    }
}

Объекты фрагмента содержат достаточно информации для этого, но мне не удалось найти библиотеку, несмотря на много поисков в Google.

  • Вариант 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'];
};

Есть ли способ превратить это в то, что я хочу вместо этого?

1 Ответ

0 голосов
/ 14 августа 2020

Инструмент, который вы перечислили выше для генерации определений типов, гласит на своем веб-сайте следующее. поведение в соответствии с вашими потребностями.

Таким образом, должна быть возможность написать собственный плагин, чтобы делать то, что вам нужно, вот ссылка на начало разработки плагина для этого.

https://graphql-code-generator.com/docs/custom-codegen/write-your-plugin

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...