Everything is good and fine, but you cannot have good type inference with dynamic typing and optional static typing. You cannot infer anything about untyped variables, only constants and functions/ops with return types.
You can in stricter languages, where the type of a variable is not allowed to change, but in a dynamic languages type inference is limited to explicitly typed variables.
You can infer a bit with function signatures and esp. with return types of your internal ops, but everything ends with your normal variable.
I also miss the argument that optional static types enable a proper FFI syntax.
I also miss the argument that optional static types enable a proper FFI syntax.