The original Generation I Pokémon games contained 15 Pokémon types.
Those games used Normal, Fire, Water, Electric, Grass, Ice, Fighting, Poison, Ground, Flying, Psychic, Bug, Rock, Ghost, and Dragon. Type matchups shaped battles by determining which attacks were especially effective, weak, or ineffective against a defending Pokémon.
Dark and Steel were added in Generation II, increasing the total to 17. Fairy was introduced in Generation VI, bringing the modern total to 18. This historical sequence is why modern type charts cannot be applied unchanged to the original Game Boy games.
Generation I also contains a famous type-chart oddity: Ghost-type moves were intended to be super effective against Psychic Pokémon, but a game programming error made that matchup behave incorrectly. The type itself still existed, even though its early interactions were imperfect.