如何在流中获取函数的返回类型?
问题描述:
有了这个例子:如何在流中获取函数的返回类型?
const myObj = {
test: true,
};
type MyType = typeof myObj;
const getValue =(): MyType => {
return myObj;
};
// how to do this??
type TheReturnType = getValue;
const nextObj: TheReturnType = {
test: false,
};
我想提取type
该函数将返回,这样我就可以重新使用该类型。我想不出来。上述不起作用。 typeof getValue
将返回该功能。
答
这里是一个ExtractReturn
帮手,它可以抓住一个函数的返回类型:
type ExtractReturn<F> =
$PropertyType<$ObjMap<{ x: F }, <R>(f:() => R) => R>, 'x'>
让我们用这样的:
type TheReturnType = ExtractReturn<typeof getValue>
现在TheReturnType
将有getValue
函数的返回类型。另请注意,调用ExtractReturn
帮助程序需要在函数名称前加上typeof
运算符。
这是贯彻落实ExtractReturn
助手一个完全不同的方式:
type _ExtractReturn<B, F: (...args: any[]) => B> = B;
type ExtractReturn<F> = _ExtractReturn<*, F>;
此助手的工作原理完全一样,如上图所示;重点是有多种方法可以实现这一点。
'getValue'返回一个'MyType'类型,所以你不能只将'nextObj'的类型设置为'MyType'?或者我误解了? – saadq
我不认为有办法做到这一点。也不能保证给定的函数只有一种类型。根据输入参数,许多函数具有不同的类型。 – loganfsmyth
@loganfsmyth许多可能的类型可以表示为这些类型的联合,这是一种单一的类型! –