我有一个函数签名,我需要一堆函数来遵循,如下所示:
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>