Creating effective shared types in TypeScript without destroying hoverability - Theo's Typesafe Cult