Наследовать и объявлять амплифицированные сгенерированные типы из внешнего файла в проекте Typescript - PullRequest
0 голосов
/ 05 ноября 2019

Я реализую проект машинописи с aws-ampify в монорепо. У monorepo есть веб-проект под: packages/web и проект моделей, который включает операции и типы graphql в: packages/models. После создания моей схемы graphql в ampify я генерирую операции и типы с помощью amplify codegen до packages/models/src/graphql/

Пока все хорошо, в проекте Vue я могу импортировать операции и типы как import {listOrganizations, ListOrganizationsQuery} from "models";, выполнившие запросы, получите результат. Когда пришло время использовать действие в компоненте, я снова импортирую типы из моделей и использую их.

Идея, которую я придумаю, заключается в том, что если есть способ импортировать типы из проекта моделей и включить все типы в веб-проекте в файл .d.ts, чтобы пропустить импорт типов из репозитория моделей. Поэтому каждый раз, когда я генерирую операции и типы graphql, я хочу, чтобы веб-репо импортировало типы и объявляло глобально в веб-проекте возможность пропустить импорт типов.

Что я пробовал:

  1. Создать файл api.d.ts в packages/web/src

  2. Импорт типов из packages/models/src/graphql/API.ts

Что я пытаюсь сделатьЗдесь можно импортировать и объявлять все типы из моделей по всему миру, но я застрял на этом этапе.

пакетов / моделей / моделей / src / graphql / API.ts

export type ListOrganizationsQuery = {
  listOrganizations:  {
    __typename: "ModelOrganizationConnection",
    items:  Array< {
      __typename: "Organization",
      id: string,
      name: string,
      externalId: string | null,
      status: OrganizationStatus,
      logo: string,
    } | null > | null,
    nextToken: string | null,
  } | null,
};

packages / web / src / api.d.ts

import "models/src/graphql/API.ts";

VSCode не распознает импортированные типы, и компилятор не компилируется, пока у меняделать это, вероятно, не правильно. Есть ли способ импортировать все типы и объявить глобально? Или есть какой-то другой лучший метод, который я должен применить вместо того, чтобы делать то, что я пробовал?

1 Ответ

0 голосов
/ 11 ноября 2019

Пару дней спустя попробовав различные обходные пути, я наконец осознал, что я пытался сделать. Целью импорта и объявления типов во всем мире было то, что amplify codegen создавал типы для запросов, мутаций и подписок, но не создавал типы для моделей. Поэтому мне пришлось переписывать модели в приложении веб-интерфейса, но каждый раз, когда я обновлял схему graphql, мне также приходилось обновлять типы веб-интерфейса.

Мой обходной путь для этого - динамический импорт типов запросов из пакетов / моделей в declarations.d.ts, который находится в моем внешнем проекте. И просто объявите там подобные типы моделей.

Пример

пакетов / моделей / src / graphql / API.ts

export type GetOrganizationQuery = {
  getOrganization:  {
    __typename: "Organization",
    id: string,
    name: string,
    decription: string | null,
    ...

};

packages / web / src / types / Declarations.d.ts

declare type TOrganization = import("../path/to/models").GetOrganizationQuery["getOrganization"];
...