使用函数接口来确保参数,但推断更具体的返回类型



我有一个函数签名,我需要一堆函数来遵循,如下所示:

type ActionCallback<R = any> = (param1: SpecificType, param2: OtherType) => Promise<R>

基本上,参数的类型是明确定义的,它必须返回一个承诺,但该承诺解析的内容取决于函数。

我不想在每个回调中指定两个参数的类型,而只想指定变量符合ActionCallback以便推断参数类型:

const callback1: ActionCallback = async (a,b) => ({state: b().form, stuff: a});
const callback2: ActionCallback = async e => e.name; // doesn't need second arg in some cases

但是,这样做意味着无法推断泛型参数,因此我必须显式指示返回类型或使其默认为any

有没有办法最大限度地减少我必须显式标记的类型数量,确保函数返回 Promise 并从函数体推断 promise 的解析?

由于函数可以在其参数中推断泛型类型,因此要包装的简单函数可以获得以下行为:

function MakeCallback<R>(callback: ActionCallback<R>): ActionCallback<R> {
return callback;
}
const callback1 = MakeCallback(async e => e.name); // now can infer the return as Promise<typeof e.name>

最新更新