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相关的参数对象吗?
我面临的问题是,在生成的端点上创建的 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相关的参数对象吗?