Ошибка при попытке импорта: «Модель» не экспортируется из «../module»

Реагирующее приложение Typescript постоянно не может импортировать определение интерфейса, хотя VS Code правильно разрешает модуль.

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

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

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

Я уже пытался удалить 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'.

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


person Cassiano    schedule 07.02.2019    source источник


Ответы (2)


Для тех, кто сталкивается с той же проблемой, я понял, что генератор кода openapi версии 4.0.0 (SNAPSHOT, созданный 11.01.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 пытаются решить эту проблему в этой проблеме.

person Cassiano    schedule 07.02.2019
comment
Эта проблема была решена. Перечисления теперь экспортируются за пределы пространства имен. - person Cassiano; 26.08.2019

У меня такая же проблема при попытке собрать машинописный текст src из node_modules.

Мне помог плагин @babel/plugin-transform-modules-commonjs.

person Boris Vagaitsev    schedule 04.02.2020