マーシャリングについて補足しとくと
例えばある変数xにRangeオブジェクトが入っていることを知っているとして、C#の型で扱おうとすればラッパー型で包んでやる必要がある
これってよく考えると無駄で、xがRange型であることは本来コンパイラとVSの静的アナライザだけが知っていればよくて、実行時に実際にラップ(マーシャリング)する必要は本来ない
つまり
dynamic<Range> x; //xはRange型のメンバを持つことが保証される
みたいなことができればよくて、これこそがTypeScriptの型なんだよ