Good breakdown of the interface vs type alias tradeoffs. One thing worth adding to the declaration merging section, that same feature is also a footgun in a large codebase. Two files can declare the same interface name and merge silently, and if that's accidental rather than intentional it can hide a naming collision that a type alias would've caught immediately as a duplicate identifier error.