All Pokémon creatures and their moves are assigned certain types. Each type has several strengths and weaknesses in both attack and defense. In battle, you should use Pokémon and moves that have a type advantage over your opponent; doing so will cause much more damage than normal.
A single-type advantage (for instance a Water attack against a Ground-type Pokémon) will net you double normal damage. The advantages also stack up, so a double-type advantage (for instance a Water attack against a Ground/Rock-type Pokémon) will net you quadruple damage. In both these cases you will see the message It's super effective! in-game after the attack.
Conversely, a single and double-type disadvantage will afflict half and a quarter normal damage respectively. Here you will see the message It's not very effective... in-game.
Another advantage you can gain is Same Type Attack Bonus (STAB). As the name implies, this increases the power of the move if the attacking Pokémon has the same type as the move used (for example a Fire-type Pokémon using a Fire-type move). In this case the damage is 1.5 times normal. Again this is added to any other advantages, so a Water-type Pokémon using a Water-type move against a Ground/Rock-type Pokémon will bag you six times (2x2x1.5) normal damage!
The majority of the type chart has remained the same over the years, but there have been a few changes. In Generation 2, Dark and Steel types were added, while in Generation 6 (Pokémon X and Pokémon Y) the Fairy type was added. Below are the differences compared to the current type chart. The charts can be seen on the Old Type Charts page.
There was no Fairy type.
Ghost and Dark type moves were not very effective against Steel type Pokémon. From Generation 6 they do neutral damage.
There were no Dark or Steel types.
Ghost-type moves had no effect on Psychic Pokémon. (Note that this only affected Lick as Confuse Ray and Night Shade affected all Pokémon equally.)
This was supposedly a mistake in the programming: several game guides stated that Ghost was super-effective on Psychic, and an in-game trainer at Saffron City says that Psychic Pokémon fear only ghosts and bugs! It was corrected in Generation 2 when Ghost became super-effective against Psychic.
Bug was super-effective on Poison and vice-versa. This was changed so that Bug is now not very effective against Poison, and Poison now does regular damage against Bug.
Ice type moves were neutral against Fire type Pokémon. Now they are not very effective.