【问题标题】:TypeScript argument type inference for a generic function argument with return?带有返回的通用函数参数的TypeScript参数类型推断?
【发布时间】:2020-10-31 23:44:11
【问题描述】:

我正在尝试创建一个通用函数,该函数接受另一个函数并推断返回类型(类似于 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'

如何正确输入这个函数?

【问题讨论】:

    标签: typescript typescript-generics


    【解决方案1】:

    这里有一个不必要的额外泛型类型:

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

    返回的T 实际上是这个:&lt;T&gt;(...),但我怀疑你需要game_selector&lt;T&gt; 提供的类型。

    如果您在 Typescript 操场上尝试此操作,您实际上会在 game_selector&lt;T&gt; 中看到略带灰色的 T。当您将鼠标悬停在它上面时,它会向您显示一条警告:

    'T' 被声明,但它的值从未被读取。(6133)

    这将为您解决问题:

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

    【讨论】:

    • 确实如此。外部T 被内部T 遮蔽。
    • 谢谢。我没有意识到您不需要类型定义上的 ,因为我认为它与匿名泛型类型相同。这就是我现在想要的。
    猜你喜欢
    • 2020-01-23
    • 2022-11-05
    • 2019-12-06
    • 1970-01-01
    • 1970-01-01
    • 2019-01-07
    • 2018-08-28
    • 2016-11-01
    • 1970-01-01
    相关资源
    最近更新 更多