groupby-typename
Version:
Type-safe and tested utility to easily group an array of GraphQL objects by their typename
30 lines (28 loc) • 908 B
TypeScript
import { GraphQLObject, GroupedGraphQLObjects } from "./types.js";
//#region src/groupByTypename.d.ts
/**
* Groups an array of GraphQL objects by their `__typename` property.
*
* Useful when getting nodes or a union of types from a GraphQL response.
*
* @example
* ```ts
* const data = [{ __typename: 'User' as const }, { __typename: 'Post' as const }];
* const grouped = groupByTypename(data);
* // ^? const grouped: {
* // User?: {
* // __typename: "User";
* // }[];
* // Post?: {
* // __typename: "Post";
* // }[];
* // }
* const users = grouped.User;
* // ^? const users: {
* // __typename: "User";
* // }[]
* ```
*/
declare function groupByTypename<Objects extends readonly GraphQLObject[], Grouped = GroupedGraphQLObjects<Objects>>(objects: Objects): Grouped;
//#endregion
export { groupByTypename };