嗯,通过 openapi-typescript 生成 swagger 的类型定义(类型定义文件内容如下)
export interface paths {
"/api/cusfood/create": {
post: operations["controller-cusfood-create"];
};
}
export interface definitions {
cusfoodRequest: {
ch?: number;
energy: number;
fat?: number;
protein?: number;
};
cusfoodResponse: {
/** 状态码 */
code: number;
/** 具体数据 */
data: definitions["cusfoodbody"];
/** 是否成功 */
success?: boolean;
};
}
export interface operations {
"controller-cusfood-create": {
parameters: {
body: {
/** ( post 对应 body 请求,请求值设定为用户习惯信息 )。 */
body: definitions["cusfoodRequest"];
};
};
responses: {
/** ( 响应 )。 */
200: {
schema: definitions["cusfoodResponse"];
};
};
};
}
然后我想写个方便的泛型函数,来约束入参类型,以及方便编辑器提示出参类型
const xFetch = <
Path extends keyof paths,
OpName extends keyof paths[Path],
Query extends ???,
Body extends ???,
Resp extends ???
>
(path: Path, opName: OpName, query: Query, body: Body): Promise<Resp> => {
// 由于 path + OpName 具有唯一性
// 那么应该可以利用 typescript 里面的 可辨识联合 来推导出 Query, Body, Resp 的类型
}
求助
谢谢
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.