The theoretical perfect coverage move set involves 9 types - Ground, Dark, Rock, Fighting, Fairy, Fire, Grass, Poison and Water/Ice.
These type combinations cover every single type combination until gen 7, bar Mimikyu (Fairy/Ghost).
Ground - must have since it’s the only SE vs electric. Also covers fire, poison, steel
Fighting - must have since it’s the only SE vs normal. Also covers rock, steel, ice, dark
Dark - Covers psychic and ghost mainly. Can be swapped for ghost type, at the cost of poor coverage vs normal/psychic types
Rock - Covers mainly flying, bug types and remaining fire types like moltres (immune to ground)
Fairy - Dragon coverage (better than Dragon as it also covers fighting types), as well as some dark types not covered by fighting (like sableye)
Fire - Mainly for Grass types, the remaining bugs, and flying/steel types
Grass - Mainly to counter water and ground types, with the rest being countered by their secondary typings
Poison - Mainly counters fairies, and covers for Ludicolo (something steel types can’t cover)
Water/Ice - Only to counter a specific type combination; ground/flying
With that in mind one possible combination might be, assuming a surplus of fast TMs and unlocked 2nd slot;
Weavile (ice, dark), Roserade (poison, grass), Blaziken with Blast burn (Fire, Fighting), Rhyperior (Ground, Rock) Gradevoir/Togekiss (Fairy, Psychic/Flying)
The above pokemon are all among the top damage dealers of their type, bar fighting blaziken. Of course this is all just theoretical and does not factor in the opponents; Some types are more useful than others depending on raid targets availablility, and also depending on raid target movesets.
Also the above pokemon are not THE BEST pokemon for the job; example - 6 TTars/Gengars i believe generally do better vs 6 Weaviles when taking on targets like Deoxys depending on movesets. Also I dont believe TTar to be considered Rock/Dark mixed attackers since their rock fast move cant be TMed and u generally dont want to TM it away.
I always believe in a good mix of pokemon in your team, with more readily available pokemon easier to level given higher lucky potential and candy count.