Example implementation for an "as" property for a react component.
This gist includes two options for the base Container component - one using classnames and one using clsx.
Note: This example uses TailwindCSS classes for an example of specialising styles.
See my Medium Article discussing this code's development and for related articles and reading on TypeScript generics with React.
const children = "Example";
<Container>{children}</Container> // Default <div> tag
<Container as="article">{children}</Container> // Using an <article> tag
<PaddedContainer>{children}</PaddedContainer> // Default <div> tag with slight padding
<PaddedContainer as="article">{children}</PaddedContainer> // Using an <article> tag with slight padding
<StandardContainter>{children}</StandardContainer> // Default <div> tag with slight padding and margin
<StandardContainer as="article">{children}</StandardContainer> // Using an <article> tag with slight padding and margin