即使VS Code正确解析了模块,Typescript react app也始终无法导入接口定义。
我使用了基于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 Code很好地解析了类型定义。但是,该应用程序无法生成。
构建因错误而失败:
./src/api/proxies/ModelProxy.ts
Attempted import error: 'Model' is not exported from '../api'.
我出于机密原因更改了文件名。
对于遇到相同问题的任何人,我认为openapi代码生成器版本4.0.0(SNAPSHOT构建于2019年11月11日)使用命名空间生成打字稿代码,以模拟枚举的接口内部的静态字段,如下所示:
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维护人员正在尝试解决此问题。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句