I’ve looked into this recently, and I think there are two separate things to consider here.
For SharePoint list attachments, your findings are basically correct. The Power Apps Code Apps SharePoint integration currently generates CRUD operations for SharePoint list items, but the generated service does not expose APIs for uploading/downloading/deleting list attachments. There is also an open Microsoft PowerAppsCodeApps issue specifically requesting support for SharePoint list attachments.
So I would not recommend trying to force SharePoint List Attachments through the generated SDK. If attachments are a core requirement, a SharePoint Document Library is a much better architecture. You can store the file in a library and maintain the relationship to your business record through a lookup/ID or metadata. The SharePoint connector itself has file operations, whereas the generated Code Apps SharePoint service is currently more limited.
For Dataverse File columns, however, the situation has changed. Microsoft's current Code Apps documentation now lists image and file upload/download as a preview capability for Dataverse connections. The generated functions are available under src/generated/services when Dataverse is added through the npm-based CLI. Microsoft also provides a Dataverse demo app demonstrating CRUD plus file upload/download.
Therefore, if the Dataverse File column is visible in metadata but the generated TypeScript service doesn't contain the file functions, I would first verify that you're using the latest Power Apps Code Apps / PAC CLI tooling and regenerate the data-source/service definitions. It may be a tooling/version difference rather than the platform not supporting the scenario.
From an architecture perspective, I would rank the options like this:
1. SharePoint Document Library — my preferred option if SharePoint is your backend
Code App → SharePoint Library
Store the file as an actual SharePoint document and keep the business record ID as metadata. This also gives you SharePoint's native document capabilities, versioning, permissions and search.
2. Dataverse File Column — good option if the file logically belongs to the Dataverse record
Code App → Dataverse File Column
This is now supported as a preview scenario in Code Apps, although I'd verify the generated SDK/tooling version before implementing it in production.
3. Power Automate — useful as an integration layer
If the Code App can capture the file but the generated connector doesn't provide the required upload operation, a flow can act as the boundary:
Code App → Power Automate → SharePoint Document Library
This is particularly attractive if you need additional processing, metadata assignment, folder creation, notifications, etc.
I would avoid SharePoint List Attachments for a new Code App unless Microsoft exposes attachment operations in the Code Apps SharePoint SDK. The fact that {Attachments} and {HasAttachments} appear in the schema doesn't necessarily mean the generated Code Apps service supports binary attachment operations.
One useful distinction is that the standard Power Apps Attachment control does support upload/delete against SharePoint lists and Dataverse tables, but that's a different capability from the generated TypeScript APIs available to Code Apps.
So, based on the current documentation, I wouldn't consider your SharePoint finding a configuration problem. It's primarily a limitation of the generated SharePoint Code Apps service today. For a new implementation, I'd choose a SharePoint Document Library + metadata relationship, or Dataverse File Column if you're comfortable with its current preview status.
The official Code Apps documentation is also worth following because this area is evolving quickly.