This is by design, and rather well explained in the typescript documentation: the type system is based on structural subtyping, which seems like a good tradeoff to me (but of course, as any design choice, not everyone should agree, and it's fine).
Structural subtyping doesn't imply lack of soundness, OCaml object types have structural subtyping too and OCaml is sound.