From https://github.com/Microsoft/TypeScript/blob/master/doc/spec.md#1.6
The 'public' keyword denotes that the constructor parameter is to be retained as a field. Public is the default accessibility for class members, but a programmer can also specify private or protected accessibility for a class member. Accessibility is a design-time construct; it is enforced during static type checking but does not imply any runtime enforcement.
I wonder why it couldn't be enforced during runtime... Or perhaps it's intentionally designed this way?