我有以下代码,其中myAction
是一个thunk:
export type ArgumentTypes<F extends Function> = F extends (
...args: infer A
) => any
? A
: never;
const dispatched = <T extends Function>(action: T, args: ArgumentTypes<T>) => {
const result = store.dispatch(action(args));
return result;
};
const res = dispatched(myAction, null);
如何正确键入dispatched
函数的ReturnType
。res
当前显示any
其他所有的东西,包括dispatch
都是正确的类型。redux中有没有类型可以转换这个?
sandbox
沙箱中res
的预期类型为Promise<string>
更新:
我能把它降到这个程度
const dispatched = <T extends AsyncThunk<{}, {}, {}>>(
action: T,
args: ArgumentTypes<T>,
) => {
const result = store.dispatch(action(args));
return result;
};
const res = await dispatched(myAction, null).unwrap();
它现在正确地返回传入AsyncThunk<>
的任何内容,但不确定如何使其泛型化
1条答案
按热度按时间mzaanser1#
不管出于什么原因,
<T extends Function>
不能与内置类型Parameters<T>
和ReturnType<T>
一起工作,但是<T extends (...args: any[]) => any>
可以工作。我在这里有点困惑,你想如何接受操作创建者的参数。可以有多个参数吗?你是以单独的参数还是数组的形式传递多个参数?你在问题
dispatched(myAction, null)
中的内容和你在沙箱dispatched(myAction, ["hello world"])
中的内容是有区别的。在我看来,dispatched(myAction, "hello world")
的语法要好得多。所以我就这么做。