我想要一个带有(() => T) | T
类型参数的通用函数,比如
const myGenericFunction = <T>(param: ((() => T) | T)): T => {
if (typeof param === 'function') { return param(); }
return param;
};
然而,在这种情况下,流程并不知道如果我传递() => 1
的参数,那么T
是number
,而不是() => number
。我如何帮助理解T
不应该是一个函数?
答案 0 :(得分:0)
Flow不包含&#34; not&#34;类型(例如$Not<Function>
),所以我不认为这是完全通用的方法。但是,如果T
只能是类型的子集,则可以使用绑定泛型来完成此操作:
const myGenericFunction = <T: number | string | {}>(
param: ((() => T) | T)
): T => {
if (typeof param === 'function') { return param(); }
return param;
};