如何使用OpenAPITools代码生成器生成的Axios API客户端?

时间:2019-03-17 18:04:47

标签: typescript axios

因此,我正在使用Swagger Codegen为我的Vue应用程序中的Fetch客户端生成API客户端。
现在我想改用Axios,所以我使用了OpenAPITools typescript-axios代码生成器。
java -jar .\openapi-generator-cli.jar generate -i http://localhost:5000/swagger/v1/swagger.json -g typescript-axios -o app\api

当我尝试将类型化的响应分配给我的本地变量(相同类型)时:

@Component
export default class Themes extends Vue {
  private themesApi!: ThemesApi;
  private themes: Theme[];

  constructor() {
    super();
    this.themes = [];
  }

  private async mounted() {
    const apiConfig: Configuration = {
      basePath: config.API_URL,
    };

    this.themesApi = new ThemesApi(apiConfig);
  }

  private async getThemes() {
    this.themes = await this.themesApi.getThemes();
  }
}

,出现此TypeScript错误:

> 139:5 Type 'AxiosResponse<Theme[]>' is missing the following
> properties from type 'Theme[]': length, pop, push, concat, and 28
> more.
>     137 | 
>     138 |   private async getThemes() {
>   > 139 |     this.themes = await this.themesApi.getThemes();
>         |     ^

局部变量具有相同的类型: enter image description here  那么为什么会出现此错误?

1 个答案:

答案 0 :(得分:1)

看看Axios的类型,特别是AxiosResponsehttps://github.com/axios/axios/blob/master/index.d.ts#L70

在您的情况下,您将看到它接受一个通用的Theme,可以在data属性下进行访问。因此,您需要使用以下类似的方法来发挥价值:

private async getThemes() {
  const response = await this.themesApi.getThemes();
  this.themes = response.data;
}