> They don't seem to come with the benefits of optimisation that you get with static typed languages

They don't. And cannot, for compatibility reasons. Aside from setting some dunders on certain objects (which are entirely irrelevant unless you're doing some crazy metaprogramming thing), type annotations have no effect on the code at runtime. The Python runtime will happily bytecode-compile and execute code with incorrect type annotations, and a type-checking tool really can't do anything to prevent that.

Now that python has a jit it could use them (not saying it should) for speculative compilation

My understanding is that currently python can collect type data in test runs and use it to inform the jit during following executions

> Now that python has a jit it could use them (not saying it should) for speculative compilation

I'd forgotten about that. Now that you mention it, my understanding is that this is actually the plan.