Attempted import error: 'Model' is not exported from '../module'
Attempted import error: 'Model' is not exported from '../module'
Typescript React 应用程序无法一致地导入接口定义,即使 VS Code 正确解析了模块。
我使用基于 swagger 规范的 openapi 代码生成器使用 create-react-app 和 REST 客户端构建了一个 typescript react 应用程序。
然后,我在整个应用程序中使用生成的接口定义作为类型定义。
但是,由于某些原因,我有时无法不一致地导入这些定义。
我已经尝试删除 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
我从 React 组件导入 ModelProxy 以进行 api 调用并隔离自动生成的代码。这种模式已经运行了一段时间了。
令我惊讶的是 Visual Studio 代码很好地解析了类型定义。但是,该应用程序不会生成。
构建失败并出现错误:
./src/api/proxies/ModelProxy.ts
Attempted import error: 'Model' is not exported from '../api'.
出于保密原因,我更改了文件名。
对于遇到相同问题的任何人,我认为 openapi 代码生成器版本 4.0.0(SNAPSHOT 构建于 2019 年 1 月 11 日)使用命名空间来模拟枚举接口内的静态字段来生成打字稿代码,如下所示:
interface Pet {
status: Pet.StatusEnum
...
}
// later in the file ...
export namespace Pet {
export enum StatusEnum {
Available = 'available',
Pending = 'pending',
Sold = 'sold'
}
}
That is not supported by Babel,是什么原因导致的错误。
对我来说,解决方法是手动编辑文件以不同的名称导出枚举,例如示例中的 PetStatusEnum
并完全放弃命名空间。像这样:
interface Pet {
status: PetStatusEnum
...
}
// later in the file ...
export enum PetStatusEnum {
Available = 'available',
Pending = 'pending',
Sold = 'sold'
}
OpenAPI 维护者正试图在 this issue 中解决此问题。
我在尝试从 node_modules
构建一些打字稿 src
时遇到了同样的问题。
插件@babel/plugin-transform-modules-commonjs
帮助了我。
Typescript React 应用程序无法一致地导入接口定义,即使 VS Code 正确解析了模块。
我使用基于 swagger 规范的 openapi 代码生成器使用 create-react-app 和 REST 客户端构建了一个 typescript react 应用程序。
然后,我在整个应用程序中使用生成的接口定义作为类型定义。
但是,由于某些原因,我有时无法不一致地导入这些定义。
我已经尝试删除 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
我从 React 组件导入 ModelProxy 以进行 api 调用并隔离自动生成的代码。这种模式已经运行了一段时间了。
令我惊讶的是 Visual Studio 代码很好地解析了类型定义。但是,该应用程序不会生成。
构建失败并出现错误:
./src/api/proxies/ModelProxy.ts
Attempted import error: 'Model' is not exported from '../api'.
出于保密原因,我更改了文件名。
对于遇到相同问题的任何人,我认为 openapi 代码生成器版本 4.0.0(SNAPSHOT 构建于 2019 年 1 月 11 日)使用命名空间来模拟枚举接口内的静态字段来生成打字稿代码,如下所示:
interface Pet {
status: Pet.StatusEnum
...
}
// later in the file ...
export namespace Pet {
export enum StatusEnum {
Available = 'available',
Pending = 'pending',
Sold = 'sold'
}
}
That is not supported by Babel,是什么原因导致的错误。
对我来说,解决方法是手动编辑文件以不同的名称导出枚举,例如示例中的 PetStatusEnum
并完全放弃命名空间。像这样:
interface Pet {
status: PetStatusEnum
...
}
// later in the file ...
export enum PetStatusEnum {
Available = 'available',
Pending = 'pending',
Sold = 'sold'
}
OpenAPI 维护者正试图在 this issue 中解决此问题。
我在尝试从 node_modules
构建一些打字稿 src
时遇到了同样的问题。
插件@babel/plugin-transform-modules-commonjs
帮助了我。