Earlier quoted context omitted.
`7[2]` is valid Javascript, so it is also valid TypeScript (fetching the '2' member of the `7` object). Detecting null expressions at compile time might help. There are "nullable" types, but afaik only in signatures: foo(x?) { alert(x); } If `x` is not passed in, it will be `undefined`.
"wingspan" * 7 is also gramatically correct JavaScript, but evaluates to NaN and almost certainly isn't what you want in your JS program, which is why TypeScript prints a type error (well, warning) if you try to compile it. Having optional variables is similar, but not the same as nullable types, especially when the compiler can't enforce non-nullable-ness. All JS devs are familiar with the annoying error "'null' is…
var s = 'foo';
var l = s['length'];
// type of l is `string`
I also agree about non-nullable types, and I've found even with TypeScript, having to make sure your vars are defined and not-null is still a pain.