&gt; if you left out the addition of run-time checks, and performed only those static checks that the partial typing has enabled?<p>This is effectively what &quot;optional types&quot; are, which is a sort of sister technology to &quot;gradual types&quot;. With optional types, they are <i>only</i> used to show static type errors to the user during development time. At runtime, all of the type annotations are ignored and the program runs like it is fully dynamically typed.<p>This is how Dart, TypeScript, and (I think) ActionScript, Hack, and Flow work. You&#x27;ll note that those are all languages from industry and have had various degrees of success and real-world usage.<p>Dart can also be run in &quot;checked mode&quot;, which means it will also do the runtime checks with worse—but not catastrophically so— performance. Sort of like running a debug build with asserts enabled. (And, in fact, checked mode also enables the assert() statement in Dart.)