Я пытаюсь построить вспомогательную функцию в Typescript (React). Я определил функцию, которая возвращает object
или object[]
на основе данных ответа.
Теперь, когда я использую функцию, возвращаемое значение type
равно T | T[]
, и оно должно быть T
или T[]
на основе данных.
Моя вспомогательная функция
import { useQuery } from '@apollo/react-hooks';
import { flatMap } from 'lodash';
export default function QueryHelper<T> (document: any, variables?: {}) {
const { data: responseData, loading, error } = useQuery(document, { variables });
const object = (): T => responseData;
const array = (): T[] => flatMap(responseData);
let data;
if (flatMap(responseData).length === 1) {
data = object();
} else {
data = array();
}
return { data, loading, error };
}
Вызов функции
const objects = QueryHelper<Object>(multipleObjectsDocument);
const object = QueryHelper<Object>(singleObjectDocument, { id });
типы возврата
const Object: {
data: Object| Object[]; // This needs to be 1 type
loading: boolean;
error: ApolloError | undefined;
}
Основная идея заключается в том, что я могу позвонить, например;
const name = object.data.name';
const listOfName = objects.data.map(obj => obj.name);
Теперь я получаю следующую ошибку Property 'map' does not exist on type 'Object | Object[]'.
Я также попытался условно вернуть различные переменные, основываясь на операторе if, но это возвращает;
const Object: {
object: Object;
loading: boolean;
error: ApolloError | undefined;
} | {
array: Object[];
loading: boolean;
error: ApolloError | undefined;
}