Reactjs 如何从函数返回单个类型

Reactjs 如何从函数返回单个类型,reactjs,typescript,function,graphql,apollo,Reactjs,Typescript,Function,Graphql,Apollo,我正试图在Typescript(React)中构建一个helper函数。我定义了一个函数,根据响应数据返回对象或对象[] 现在,当我使用函数时,返回的type是T | T[],根据数据,这需要是T或T[] 我的助手函数 import { useQuery } from '@apollo/react-hooks'; import { flatMap } from 'lodash'; export default function QueryHelper<T> (document: a

我正试图在Typescript(React)中构建一个helper函数。我定义了一个函数,根据响应数据返回
对象
对象[]

现在,当我使用函数时,返回的
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 name = object.data.name';
const listOfName = objects.data.map(obj => obj.name);
现在我得到以下错误
类型“Object | Object[]”上不存在属性“map”。

我还尝试根据if语句有条件地返回不同的变量,但这会返回

const Object: {
    object: Object;
    loading: boolean;
    error: ApolloError | undefined;
} | {
    array: Object[];
    loading: boolean;
    error: ApolloError | undefined;
}
刚刚修好了

export default function QueryHelper<T> (document: any, variables?: {}): queryResponse<T> {
  const { data: responseData, loading, error } = useQuery(document, { variables });
  let data = responseData ?? [];

  const array = flatMap(data);

  if (!loading && array.length === 1) {
    data = array[0];
  } else {
    data = array;
  }

  return { data, loading, error };
}
导出默认函数QueryHelper(文档:any,variables?:{}):queryResponse{
const{data:responseData,loading,error}=useQuery(文档,{variables});
让数据=响应数据??[];
常量数组=平面图(数据);
如果(!loading&&array.length==1){
数据=数组[0];
}否则{
数据=数组;
}
返回{数据,加载,错误};
}
召唤

const objects=QueryHelper(多对象文档)。数据;//返回类型对象[]
const object=queryhelp(ObjectDocument,{id}).data;//返回类型对象

我无需等待即可将其设置为“已解决”
const Object: {
    object: Object;
    loading: boolean;
    error: ApolloError | undefined;
} | {
    array: Object[];
    loading: boolean;
    error: ApolloError | undefined;
}
export default function QueryHelper<T> (document: any, variables?: {}): queryResponse<T> {
  const { data: responseData, loading, error } = useQuery(document, { variables });
  let data = responseData ?? [];

  const array = flatMap(data);

  if (!loading && array.length === 1) {
    data = array[0];
  } else {
    data = array;
  }

  return { data, loading, error };
}
const objects = QueryHelper<Object[]>(MultipleObjectsDocument).data; // returns type Object[]
const object = QueryHelper<Object>(ObjectDocument, { id }).data; // returns type Object