【问题标题】:How do I infer nested argument type?如何推断嵌套参数类型?
【发布时间】:2022-12-07 14:50:42
【问题描述】:

我正在使用打字稿泛型,我想推断出 fn 又名 P 的类型,但它并没有像我预期的那样工作。

Playground

这是代码:

type Callback = (...args: any[]) => any 

interface Route<
  T extends Callback
> {
  fn: T
}

function route <
  P extends Callback,
  R extends Route<P>
> (pathname: string, handler: R) {
  return handler.fn
}

const x = route('/hi', {fn: (name: string) => `hi ${name}`})
//    ^?

我希望 x 返回类型 (name: string) =&gt; string,但它返回了 Callback

【问题讨论】:

    标签: typescript typescript-generics


    【解决方案1】:

    我刚刚意识到我可以删除 R 并调用 Route&lt;P&gt; 并且它有效。我想这是有道理的。

    function route <
      P extends Callback,
    > (pathname: string, handler: Route<P>) {
      return handler.fn
    }
    

    理性是你不知道的东西应该是扩展的东西。你“知道”的事情不应该。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-08-15
      • 2011-05-11
      • 1970-01-01
      • 2013-03-19
      • 1970-01-01
      • 2018-07-26
      • 1970-01-01
      • 2019-11-03
      相关资源
      最近更新 更多