jden/jsig — pull request #26 by Raynos (2014-08-09 02:41:01+00:00)
Title: remove optional types

An optional type can either have an optional label or be
an optional type.

Let's compare

```jsig
foo : (A, B?, C) => void

foo2 : (A, b?: B, C) => void
```

There is a difference between an optional type and an
optional label.

An optional label means the argument is optional.

i.e. `foo2(A, C)` is valid.

An optional type means the type `B` is nullable

i.e. `foo(A, null, C)` is valid.

Most of the time when you think optional what you really
mean is an optional argument.

It's recommended that if you truly want a nullable type
you be more explicit about it. i.e.

`foo3 : (A, B | null, C) => void`

This PR removes optional types completely and tells you
to use optional labels.

cc @jden @Matt-Esch