如何在 TypeScript 中使用 Apollo Client 自定义钩子?
How to use Apollo Client custom hooks with TypeScript?
我正尝试在 TypeScript 项目中创建一个自定义的 Apollo Client 突变挂钩,形状如下:
const customApolloMutation = () => {
const [
mutationFunction,
{ data, loading, error, ...result } // or just {...result}
] = useMutation(GRAPHQL_QUERY)
return [mutationFunction,
{ data, loading, error, ...result } // or just {...result}
]
}
export default customApolloMutation ;
一切似乎都很好,但是当我像这样在不同的文件中导入自定义挂钩时:
const [mutationFunction, {data, loading, error}] = customApolloMutation();
...所有解构的 props 都会出现 TypeScript 错误,例如 Property 'loading' does not exist on type '((options?: MutationFunctionOptions<any, OperationVariables> | undefined) => Promise<FetchResult<any, Record<string, any>, Record<string, any>>>) | { ...; }'.ts(2339)
.
知道我做错了什么吗?我需要添加一些特定的类型吗?我是不是destructuring/calling钩子不对?
我试过 运行 它似乎类型不确定你是否会 return MutationTuple 原样,而是你正在创建的自定义突变挂钩假定 return值为(options?: MutationFunctionOptions<TData, TVariables>) => Promise<FetchResult<TData>> | MutationResult[]
.
如果你真的需要解构,那么你可以确保你已经将类型添加到你的突变挂钩中,这样你就可以向挂钩的用户保证它以特定的顺序感知数组。
const useApolloMutation = <TData, TVariables>(): MutationTuple<TData, TVariables> => {
const [
mutationFunction,
{ data, loading, error, ...result }
] = useMutation<TData, TVariables>(SOME_GQL);
return [
mutationFunction,
{ data, loading, error, ...result }
];
};
我正尝试在 TypeScript 项目中创建一个自定义的 Apollo Client 突变挂钩,形状如下:
const customApolloMutation = () => {
const [
mutationFunction,
{ data, loading, error, ...result } // or just {...result}
] = useMutation(GRAPHQL_QUERY)
return [mutationFunction,
{ data, loading, error, ...result } // or just {...result}
]
}
export default customApolloMutation ;
一切似乎都很好,但是当我像这样在不同的文件中导入自定义挂钩时:
const [mutationFunction, {data, loading, error}] = customApolloMutation();
...所有解构的 props 都会出现 TypeScript 错误,例如 Property 'loading' does not exist on type '((options?: MutationFunctionOptions<any, OperationVariables> | undefined) => Promise<FetchResult<any, Record<string, any>, Record<string, any>>>) | { ...; }'.ts(2339)
.
知道我做错了什么吗?我需要添加一些特定的类型吗?我是不是destructuring/calling钩子不对?
我试过 运行 它似乎类型不确定你是否会 return MutationTuple 原样,而是你正在创建的自定义突变挂钩假定 return值为(options?: MutationFunctionOptions<TData, TVariables>) => Promise<FetchResult<TData>> | MutationResult[]
.
如果你真的需要解构,那么你可以确保你已经将类型添加到你的突变挂钩中,这样你就可以向挂钩的用户保证它以特定的顺序感知数组。
const useApolloMutation = <TData, TVariables>(): MutationTuple<TData, TVariables> => {
const [
mutationFunction,
{ data, loading, error, ...result }
] = useMutation<TData, TVariables>(SOME_GQL);
return [
mutationFunction,
{ data, loading, error, ...result }
];
};