2017-06-22 78 views
2

有了这个例子:如何在流中获取函数的返回类型?

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将返回该功能。

+0

'getValue'返回一个'MyType'类型,所以你不能只将'nextObj'的类型设置为'MyType'?或者我误解了? – saadq

+0

我不认为有办法做到这一点。也不能保证给定的函数只有一种类型。根据输入参数,许多函数具有不同的类型。 – loganfsmyth

+0

@loganfsmyth许多可能的类型可以表示为这些类型的联合,这是一种单一的类型! –

回答

0

这里是一个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>; 

此助手的工作原理完全一样,如上图所示;重点是有多种方法可以实现这一点。