Let's break down the thing we're trying to do...
We want to display text to the user. HTML lets us do this using p tags (short for paragraph). What if we need some text with a link inside it like
Hello, how are doing?
We cannot put links on p tags, we must put them on a tags (a is short for anchor). So we need to use the span tag (I promise this is the last one) as it is allowed to hold multiple sub-p and a tags. p tags may not have p tags inside them.
We can make a component called Typography (a fancy word for text) which will allow text and other Typography components inside it. Simple usage of a Typography component would be like so
<Typography>Hello, world!</Typography>
Which would just output "Hello, world!". So what about the harder problem of mixing a and p tags? The example above could be written as
<Typography>
<Typography>Hello, how </Typography>
<Typography href="google.com">are</Typography>
<Typography> doing?</Typography>
</Typography>
Notice I wrapped all extra text in Typography components. Once a Typography component has 1 sub-Typography component, it will only accept Typography components, so you must convert all extra text to Typography. Also when this gets rendered, Typography is smart enough to convert the highest Typography to a 'span' element.
Now why make this so complicated? Well have you noticed the variants file? We can add extra, reusable styles to all these text elements.
Usually in css making a interactive text object that is bold and italic is hard, with this we can do it this quickly
<Typography interactive italic bold>Easy!</Typography>
Literally, all we do is put it there and it will appear that way.
Another benefit is refactoring which is a big word for changing your mind later. What if we decide we want to change the color of primary to blue half way through the project? With this solution, we just need to change TypographyVariant.ts' color property, and all Typography components will be updated.