Note they are type annotations. They are for tooling/development only; the runtime doesn't care about the types at all.
Neither does, say, Haskell's runtime.
[0]http://jayconrod.com/posts/54/a-tour-of-v8-crankshaft-the-op...
Or, unfortunately, a lot of static languages. Any static language that allows type casting, for instance - that's the only way they can check whether a cast from a type to one of its descendants is valid (eg, in Java, casting an Object to a, say, URL).