I made up a full league for a game I'm working on with a few others so I might as well share it.
Gym Leaders:
My Pokemon League only has four gyms, because it's a small region, but each gym specializes in three types that they build around.
Gym 1: Normal, Bug, Ghost
Gym 2: Fire, Water, Grass
Gym 3: Fighting, Dark, Psychic
Gym 4: Steel, Fairy, Dragon
Gym 1 is an awkward triangle and the one I struggled the most to come up with, but my reasoning is as follows:
Normal types - Normal types have no obvious strengths or weaknesses, especially early in the game, making the Normal types on his team act as a sort of DPS check or test of the player's endurance if they're playing defensively.
Bug types - These Pokemon are normally weak but shine the brightest early on, making them a perfect fit for the first gym.
Ghost types - This one was a bit of a wildcard, but the idea is that the Ghost types on the leader's team will force the player into a bad position if they're being too reliant on the relatively strong normal types and normal type moves they can grab early on. Ghosts are fairly weak early on, which balances out their inherent advantages over early game mons.
Gyms 2, 3, and 4 have obvious cores, because the player should be prepared to fight competent trainers by the time they reach the second gym.
Elite Four:
I don't actually have much of a plan in mind for the Elite Four outside of gimmicks like being healed between battles but having to fight all four in a row without being allowed to save, change movesets, or swap party members around. I'll probably end up using four of the remaining types here -- Electric, Poison, Ice, Ground. Ground and Ice in particular work well because the region is known for having a large tundra and a large desert that the player needs to weave in and out of during the main story.