contentMediaType on multipart file fields generates string instead of Blob | File (OpenAPI 3.1 / FastAPI)
还没有人认领这个 Issue。
评估
- 难度
- 3/5
- 预计耗时
- 1-2 天
- 新手友好度
- 68/100
- Issue 类型
- 缺陷
- 描述清晰度
- 基本清楚
- 活跃度
- 冷清
- 技术栈
- openapi, typescript
- 领域
- tooling
调研方向
Start at the TypeScript schema type-generation path and reproduce the issue with the provided OpenAPI 3.1 multipart schema. Trace how contentMediaType and format: binary are handled; done means file-like content media types generate Blob or Blob | File while other string fields remain strings, with the generated type checking for the shown consumer code.
由索引模型根据 Issue 内容生成。
描述
Summary
When an OpenAPI 3.1 spec describes a multipart file upload using contentMediaType (the OpenAPI 3.1 pattern), @openapi-codegen/typescript generates string instead of Blob (or Blob | File). This breaks TypeScript consumers that pass File objects to generated mutation hooks.
format: binary is handled correctly and maps to Blob.
Environment
@openapi-codegen/cli: 3.1.0@openapi-codegen/typescript: 11.1.0- OpenAPI source: FastAPI app (
app.openapi()), OpenAPI 3.1 - FastAPI: ≥ 0.129 (uses
contentMediaTypeforUploadFileinstead offormat: binary)
Reproduction
OpenAPI schema (multipart upload):
{
"components": {
"schemas": {
"Body_upload_proposal_document": {
"type": "object",
"required": ["document", "opportunity_id"],
"properties": {
"document": {
"type": "string",
"contentMediaType": "application/octet-stream",
"description": "Proposal document file"
},
"opportunity_id": {
"type": "string"
}
}
}
}
}
}
Generated today:
export type BodyUploadProposalDocument = {
document: string; // ❌
opportunity_id: string;
};
Expected:
export type BodyUploadProposalDocument = {
document: Blob | File; // or Blob
opportunity_id: string;
};
Consumer code that fails typecheck:
await uploadMutation.mutateAsync({
body: {
document: file, // File — TS2322: Type 'File' is not assignable to type 'string'
opportunity_id: opportunityId,
},
});
Context
- OpenAPI 3.1 uses
contentMediaTypeon schema properties for binary/multipart fields (migration guide). - FastAPI adopted this in fastapi#14953 (≥ 0.129.1).
- Other generators have addressed the same gap (e.g. hey-api/openapi-ts#3408, orval#2636).
Suggested fix
In schema type generation, when a property has:
type: string(or no explicit type), andcontentMediaTypematching a file-like MIME type (application/octet-stream,image/*, etc.),
treat it the same as format: binary and emit Blob or Blob | File.
- 主要语言
- TypeScript
- 星标
- 634
- 派生
- 83
- PR 合并指标
- 30 天内没有已合并 PR
环境准备
这个项目没有提供开发容器、Dockerfile 或贡献指南,环境需要你自己搭建:先看它的 README,通用步骤见我们的新手贡献指南。
从这里开始
- 先读完整个 Issue,再读项目的贡献指南。
- 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
- Fork 仓库,在一个分支上完成修改。
- 提交 Pull Request,并在描述里引用这个 Issue 编号。
fabien0102/openapi-codegen 的其他 Issue
-
难度 2/5 1-3 小时 新手友好度 72/100
fabien0102/openapi-codegen#343 ·
-
难度 2/5 1-3 小时 新手友好度 72/100
fabien0102/openapi-codegen#342 ·
-
难度 5/5 一周以上 新手友好度 30/100
fabien0102/openapi-codegen#356 ·
-
update dependencies & removed unused deprecated可能已有人在做 @el-j 于 2 天前认领。 未关闭
难度 3/5 1-2 天 新手友好度 25/100
fabien0102/openapi-codegen#354 ·
-
deepMerge mutates its arguments, corrupting request payloads across calls可能已有人在做 @richard-willis-chevin 于 46 天前认领。 未关闭
难度 3/5 1-2 天 新手友好度 72/100
fabien0102/openapi-codegen#349 ·
查看 fabien0102/openapi-codegen 的全部 Issue
相似的 Issue
-
community first-timers-only good first issue hacktoberfest help wanted low hanging fruit up-for-grabs
难度 1/5 1 小时以内 新手友好度 75/100
lingdojo/kana-dojo#32018 · 1 条评论 · 5 个 reaction ·
维护者通常 1 天内回复
-
难度 2/5 1-3 小时 新手友好度 72/100
paperclipai/paperclip#15751 ·
维护者通常 1 天内回复
-
难度 2/5 1-3 小时 新手友好度 72/100
BuilderIO/agent-native#7275 ·
维护者通常 1 天内回复
-
难度 2/5 1-3 小时 新手友好度 74/100
维护者通常 1 天内回复
-
难度 2/5 1-3 小时 新手友好度 65/100
维护者通常 1 天内回复