Update

Pretty much down to any non-typed variable implicitly being any. You can disable that in the compiler options:

"noImplicitAny": true

at which point you will have to define a type that can be assigned to the base-interface type.

as for the read-only. its working as intended:

you have to understand there are some differences between typescript and other OO languages like C#. Namely that the assignment of one typed variable to another is all about whether the right-side type intersects with the left-side type. i.e.