我正在尝试创建一个通用函数,该函数接受另一个函数并推断返回类型(类似于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'
如何正确键入此功能?
答案 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;