Dart, the structured web programming language, has a feature typically called "optional types". Dart claims that "type annotations don't affect the runtime semantics of the code". This post helps to explain when a type is and isn't optional, and what "type annotation" means as different than "type". The Dart discussion mailing list kicked off a good thread about generics , which evolved into when types can be optional. The Dart community chimed in with great answers (thanks to Ladislav, Sam, John, Dirk, Ross, Bob, and Eli!). Bob Nystrom summed it up well, with some examples that I wanted to specifically highlight: Bob writes: --- Types aren't always annotations. There are type annotations, but there are also places where types appear in code that are not annotations. For example: // type annotations: int i; foo( int i) => ... class Foo { int bar; int baz() => ... } // types that are not annotation