aws amplify codegen: как генерировать базовые типы для TypeScript?

#typescript #aws-amplify #aws-appsync

#typescript #aws-amplify #aws-appsync

Вопрос:

Я создаю веб-приложение React aws AppSync graphql с помощью amplify. Мне понравился этот фантастический инструмент, но я не смог заставить codegen работать так, как я ожидал — он не генерирует базовые типы для интерфейса TypeScript.

Допустим, я передаю этот schema.graphql файл в amplify codegen :

 type Event @model {
  id: ID!
  name: String
  effects: [EventEffects]
}

type EventEffect {
  name: String
  delta: Int
}
  

с этим config.yml :

 projects:
  myapi:
    schemaPath: amplify/backend/api/myapi/build/schema.graphql
    includes:
      - src/graphql/**/*.ts
    excludes:
      - ./amplify/**
    extensions:
      amplify:
        codeGenTarget: typescript
        generatedFileName: src/API.ts
        docsFilePath: src/graphql
extensions:
  amplify:
    version: 3
  

Затем codegen выдает мне API.ts и queries.ts , mutations.ts subscriptions.ts и schema.json . Проблема в том, что базовые типы не генерируются.

Я могу получить интерфейс для события с помощью:

 export interface Event
  extends Omit<Exclude<GetEventQuery["getEvent"], null>, "__typename"> {}
  

Но нет никакого способа получить интерфейс для EventEffect , так как я не добавлял @modal директиву.

Чтобы сузить круг моих вопросов:

  1. Это специально, что amplify не генерирует базовые типы?

  2. Как получить базовый тип для EventEffect ?

  3. Для чего используется schema.json сгенерированный файл?

Комментарии:

1. У меня та же проблема. Предполагается, что ваш src / models /index.d.ts должен содержать класс с именем Event и другой с именем EventEffect (чтобы следовать вашему примеру). В моем проекте это сработало, все работало нормально. Затем я обновил schema.graphql, за которым последовал принудительный запуск amplify, и все было восстановлено заново, за исключением src / models / files. Я очистил каталог src / models, затем попробовал amplify codegen и amplify codegen types, каталог по-прежнему пуст.

Ответ №1:

Ожидаете ли вы, что сгенерированные классы для Event и EventEffect можно будет использовать с DataStore.save() ? Попробуйте это:

 amplify codegen models
  

Он должен создать / обновить каталог src / models файлом index.d.ts, содержащим 2 класса, которые вы ищете.

Комментарии:

1. Жаль, что официальная страница документации AWS codegen для последней версии CLI недоступна на момент написания этого ответа.