Reactjs 如何从函数返回单个类型
我正试图在Typescript(React)中构建一个helper函数。我定义了一个函数,根据响应数据返回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
对象
或对象[]
现在,当我使用函数时,返回的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