Loopback 4 openapi nswag 使过滤器可选并获取类型

Loopback 4 openapi nswag make filter optional and get type

我面临的问题是,在生成的端点上创建的 Loopback 4 filter 在我的 Nswag 打字稿生成的文件中被标记为必需。这需要是可选的。但是我找不到它的来源。

我的端点 controller

@get('/', {
    operationId: 'getPages',
    responses: {
      '200': {
        description: 'Array of Page model instances',
        content: {
          'application/json': {
            schema: {
              type: 'array',
              items: getModelSchemaRef(Page, {includeRelations: true}),
            },
          },
        },
      },
    },
  })
  async find (
    @param.filter(Page) filter?: Filter<Page>,
  ): Promise<Page[]> {
    return this.pageRepository.find(filter);
  }

它被标记为可选的(filter?: Filter<Page>)

为此端点生成的代码

getPages (filter: any | undefined): Promise<PageWithRelations[]> {
    let url_ = this.baseUrl + "/pages?";
    if (filter === null)
      throw new Error("The parameter 'filter' cannot be null.");
    else if (filter !== undefined)
      url_ += "filter=" + encodeURIComponent("" + filter) + "&";
    url_ = url_.replace(/[?&]$/, "");

    let options_ = <RequestInit>{
      method: "GET",
      headers: {
        "Accept": "application/json"
      }
    };

    return this.http.fetch(url_, options_).then((_response: Response) => {
      return this.processGetPages(_response);
    });
  }

getPages 函数中还显示 filter 的类型为 any | undefined。我不介意 undefined(我知道它来自哪里)。但是为什么 filter 的类型没有定义为属性类型 (filter: Filter)。接口已导出,但不知何故与 属性

无关
export interface Filter {
  offset?: number;
  limit?: number;
  skip?: number;
  order?: string[];
  fields?: Fields;
}
getPages (filter: any | undefined): Promise<PageWithRelations[]> {
 // ...
}

据我了解 TypeScript,签名 filter: any | undefined 等同于 filter?: any,即参数已标记为可选。

But why isn't the type of the filter defined as the properties type (filter: Filter). The interface is exported but somehow not related to the property.

这可能是 Nswag 的限制。您的 LoopBack 应用程序生成的 OpenAPI 规范中如何描述 filter 参数?你能post相关的参数对象吗?