Попытка импорта: «Модель» не экспортируется из «../module» - PullRequest
0 голосов
/ 07 февраля 2019

Приложение реагирования на типизацию непоследовательно не может импортировать определение интерфейса, даже несмотря на то, что VS Code правильно разрешает модуль.

Я создал приложение реагирования на набор текста с create-реагировать-app и клиентом REST, используя генератор кода на основе openapiпо чванству спецификации.

Затем я использовал сгенерированные определения интерфейса для своего приложения в качестве определений типов.

Однако по некоторым причинам я время от времени не могу импортировать одно из этих определений.

Я уже пытался удалить node_modules и npm install.

Файл, который показывает проблему (ModelProxy.ts):

import { Model } from '../generated'

сгенерированный файл index.ts модуля:

export * from './models'

Файл модуля моделей index.ts:

export * from './Model'

Файл Model.ts:

export interface Model {...

Упрощенная структура файла:

| src
| - api
| - - proxies
| - - - index.ts
| - - - ModelProxy.ts
| - - generated
| - - - index.ts
| - - - models
| - - - - index.ts
| - - - - Model.ts

Я импортирую ModelProxy из компонентов React, чтобы сделать вызовы API и изолировать автоматически сгенерированный код.Эта модель работала просто отлично некоторое время.

Что меня удивило, так это то, что Visual Studio Code разрешает определения типов просто отлично.Однако приложение не создается.

Сборка завершается неудачно с ошибкой:

./src/api/proxies/ModelProxy.ts
Attempted import error: 'Model' is not exported from '../api'.

Я изменил имена файлов из соображений конфиденциальности.

1 Ответ

0 голосов
/ 08 февраля 2019

Для тех, кто сталкивался с той же проблемой, я подумал, что генератор кода openapi версии 4.0.0 (SNAPSHOT, построенный 01/11/2019) генерирует машинописный код, используя пространства имен для эмуляции статических полей внутри интерфейсов для перечислений, например:

interface Pet {
  status: Pet.StatusEnum
  ...
}

// later in the file ...

export namespace Pet {
  export enum StatusEnum {
    Available = 'available',
    Pending = 'pending',
    Sold = 'sold'
  }
}

Это не поддерживается Babel , что вызывает ошибку.

Для меня исправлением было вручную отредактировать файлы, чтобы экспортировать перечисление под другим именем, например, PetStatusEnum в примере, и полностью отказаться от пространств имен.Например:

interface Pet {
  status: PetStatusEnum
  ...
}

// later in the file ...

export enum PetStatusEnum {
  Available = 'available',
  Pending = 'pending',
  Sold = 'sold'
}

Сопровождающие OpenAPI пытаются решить эту проблему в этой проблеме .

...