带有返回值的通用函数参数的TypeScript参数类型推断?

时间:2020-07-11 10:04:50

标签: typescript typescript-generics

我正在尝试创建一个通用函数,该函数接受另一个函数并推断返回类型(类似于map的操作)。

我有此代码:

type game_selector<T> = <T>( state : GT.game_state ) => T

export function useGameState<T>( gs : game_selector<T> ): T {

然后我这样称呼它:

const users = useGameState( gs => gs.users )

我从错误中认为,gs的类型是正确推断的,因为它正确地找到了gs.users的类型为Users。错误是:

TS2322: Type 'Users' is not assignable to type 'T'

如何正确键入此功能?

1 个答案:

答案 0 :(得分:3)

您在此处有不必要的其他通用类型:

type game_selector<T> = <T>( state : GT.game_state ) => T;

返回的T实际上就是这个:<T>(...),但是我怀疑您需要game_selector<T>中提供的类型。

如果您在Typescript游乐场中尝试此操作,实际上您会在T中看到game_selector<T>略显灰色。当您将鼠标悬停在它上面时,它会向您显示警告:

声明为“ T”,但从不读取其值。(6133)

这将为您修复它:

type game_selector<T> = ( state : GT.game_state ) => T;