TypeScript is most helpful when it captures the language of the product. A type named after a real concept is easier to maintain than a loose object shaped around a component.
I prefer small domain types at boundaries, especially around content, API responses, and user-visible states. They make invalid states more visible before they become UI bugs.
The compiler is only part of the value. The bigger benefit is that future readers can see intent in the code.