Typescript 内部闭包返回的名称类型

Typescript 内部闭包返回的名称类型,typescript,Typescript,我似乎不知道如何为这个函数编写一个返回类型,它按预期工作,并且也按预期进行类型检查(无内部TODO)。事实上,部分类型是在内部关闭是扔我了 这是核心代码: type DropFirst=T扩展[未知,…推断U] ? U :从不; 导出函数useImmer(初始值:State){ const[state,set]=useState(initialValue); const dispatch=useCallback( 异步函数< 动作扩展(state:state,…args:any)=>void |

我似乎不知道如何为这个函数编写一个返回类型,它按预期工作,并且也按预期进行类型检查(无内部TODO)。事实上,部分类型是在内部关闭是扔我了

这是核心代码:

type DropFirst=T扩展[未知,…推断U]
? U
:从不;
导出函数useImmer(初始值:State){
const[state,set]=useState(initialValue);
const dispatch=useCallback(
异步函数<
动作扩展(state:state,…args:any)=>void | Promise,
T首先,
>(动作:动作,…参数:T){
const draft=createDraft(状态);
//@ts expect错误需要修复
等待行动(草案,…args);
const newState=完成草稿(草稿);
//@ts expect错误需要修复
set(newState);
返回新闻状态;
},
[国家],
);
以常量返回[状态,调度];
}
我希望能够编写一个返回类型,如:

type MyFn<A> = <B>(a: A, b: B) => void
导出函数useImmer(初始值:State):[State,Dispatcher]
类似地,我希望能够为内部函数的第一个参数编写一种类型的
操作
,如果可能的话


我正在玩生成的类型,但似乎无法将其拆分

这里需要技巧的是,您的函数在声明时(调用
useImmer
时)和调用时(调用回调时)都是泛型的。可以使用以下类型对此进行建模:

type MyFn<A> = <B>(a: A, b: B) => void
通过将动作函数签名抽象为其自己的类型,可以使其更具可读性:

type ActionType=(state:state,…args:any)=>void | Promise

键入Dispatcher=

回答得非常出色。这次崩溃使我经历了整个过程。非常感谢。