interface A { x: number; } let a: A = {x: 3} let b: {x: number | string} = a; b.x = "unsound"; let x: number = a.x; // unsound a.x.toFixed(0); // WTF is it?
When it comes to typing systems you have to pick 2: Depth, Mutability, Soundness