UUPS contract deployments with typescript

I think I have more or less figured out how to use UUPS and deploy my contracts but I am having an issue with typescript in tests and deployment scripts.
For un-upgradeable contracts I am able to use a type from the typechain, so I have all the functions of the contract available.

On the other hand, when I use the upgrades.deployProxy function the return type is Contract and all methods are lost. Is there a way around this or am I doing something wrong?

When you use the upgrades.deployProxy, the plugin simply deploys a proxy contract which does not include the logic contract. Your user interacts with the proxy not the implementation address. After deploying the proxy, you can then deploy the contract without using the plugin to see your APIs. Read more from here

Thanks for the answer!
Ok, I get what you are saying. I missed the part where I can attach my contract to the proxy like:
const box = await BoxV2.attach('0x9fE46736679d2D9a65F0992F2272dE9f3c7fa6e0');

But since my user can interact with the proxy contract, which in turn will use the functions etc on my implementation contract, wouldn't it be sensible for the typings to also apply to the proxy contract? Or at least allow me to extend the type via a generic? I can do this kind of attachment in tests but if I have a deployment script I would like my methods to be available there so I can, for example, mint some tokens or transfer access etc.

Unfortunately our plugin is not aware of TypeChain so the return type is a generic Contract. You can probably manually cast that to your contract type.

There is a PR but we haven't been able to get it to work properly yet.