It really depends on the component.
In some components, I have a single query, while in others, I have eight queries. Sometimes all the queries share the same generic type; other times, they do not.
Currently, I’m using something like this:
let combine8 = (
a: ReactFirehooks.Firestore.queryResult<'a'>,
b: ReactFirehooks.Firestore.queryResult<'b'>,
c: ReactFirehooks.Firestore.queryResult<'c'>,
d: ReactFirehooks.Firestore.queryResult<'d'>,
e: ReactFirehooks.Firestore.queryResult<'e'>,
f: ReactFirehooks.Firestore.queryResult<'f'>,
g: ReactFirehooks.Firestore.queryResult<'g'>,
h: ReactFirehooks.Firestore.queryResult<'h'>
) => {
switch (a, b, c, d, e, f, g, h) {
| ((_, true, _), _, _, _, _, _, _, _)
| (_, (_, true, _), _, _, _, _, _, _)
| (_, _, (_, true, _), _, _, _, _, _)
| (_, _, _, (_, true, _), _, _, _, _)
| (_, _, _, _, (_, true, _), _, _, _)
| (_, _, _, _, _, (_, true, _), _, _)
| (_, _, _, _, _, _, (_, true, _), _)
| (_, _, _, _, _, _, _, (_, true, _)) =>
Loading
| ((_, _, Some(error)), _, _, _, _, _, _, _)
| (_, (_, _, Some(error)), _, _, _, _, _, _)
| (_, _, (_, _, Some(error)), _, _, _, _, _)
| (_, _, _, (_, _, Some(error)), _, _, _, _)
| (_, _, _, _, (_, _, Some(error)), _, _, _)
| (_, _, _, _, _, (_, _, Some(error)), _, _)
| (_, _, _, _, _, _, (_, _, Some(error)), _)
| (_, _, _, _, _, _, _, (_, _, Some(error))) =>
Error(error)
| (
(Some(qsA), _, _),
(Some(qsB), _, _),
(Some(qsC), _, _),
(Some(qsD), _, _),
(Some(qsE), _, _),
(Some(qsF), _, _),
(Some(qsG), _, _),
(Some(qsH), _, _)
) =>
Data((qsA, qsB, qsC, qsD, qsE, qsF, qsG, qsH))
| _ => Unknown
}
}
While these generic types are usually limited to three or four actual types, they may change over time.