one fish, two fish,
red fish, blue fish
There’s only one realistic choice that people make here, in practice not theory, as shown by this ngram:

That chart shows you that what people actually write is overwhelmingly types of fish. Virtually never do they actually write types of fishes. Look at the red line compared with the blue line. There’s just no contest between the two. Blue wins.
Theoretical arguments about acceptability are meaningless in the face of actual data showing what it is that people are using in the real world. You should do what they do.
If it helps, notice that we use kinds of dog, not *kinds of dogs.