Tools: Types are useful because they provide information to development environments which can in turn provide refactoring tools and inline help.
Meta: Dynamically typed languages are a joy to use because dynamic programs can meta-program themselves.
Optional typing is perhaps a mechanism to bring both tools and meta together in perfect harmony. But to advance towards tools you must specify types that necessarily hinder meta.
We should instead harvest type information from runtime, especially from running tests. Types would then be probabilistic, but could still be used to provide the benefits of tools, without hindering meta. This is what many high performance dynamic runtimes do to optimise anyway, they just don’t share the type information with the programmer.