This has actually gotten better recently. You can now implement custom error diagnostics.
E.g. Bevy implements a trait (QueryData) for tuples of up to 32 items (A,) + (A, B) + (A, B, C)...
If you went over that 32 items, you used to get a confusing error about not your type not implementing QueryData.
Now you get a nice error message explaining the common reasons why this your type does not satisfy the trait.