Map component pattern, TypeScript's conscious choice between soundness and completeness
TypeScript creates a very intuitive alignment between the abstract type and the component type, this is thanks to its conscious choice between soundness and completeness. Some more insight can be found in this recent talk.
The map component pattern (I don't know a better name for it) is a pattern I start to like a lot recently! This talk by Jenn Creighton explains it very well (+more motivations from creating component for more sensible reuse).