繁体   English   中英

高阶函数中的打字稿泛型类型推断

[英]typescript generic type inference in higher order function

function generate<P extends object>(init: (p: P) => void) {
  return function (p: P): P {
    init(p)
    return p
  }
}

const g = generate(function AAA<T>(p: T) {
  console.log(p)
})

const result = g({
  x: 1
})

result.x // TS2339: Property 'x' does not exist on type '{}'.

generate函数是一个高阶函数,似乎 typescript 无法推断出泛型类型P

如何使generate能够接受泛型类型函数作为参数?

Typescript 3.4 围绕泛型类型参数转发的处理进行了巨大改进。 您可以在此处阅读详细信息。

虽然您的代码也不会像 3.4 那样工作,但如果我们更改init函数以接收通用元组参数,我们可以让它工作。 这将导致类型参数转发启动:

function generate<A extends [any]>(init: (...p: A) => void) {
    return function (...p: A): A[0] {
        init(...p)
        return p
    }
}

const g = generate(function AAA<T>(p: T) {
    console.log(p)
})

const result = g({
    x: 1
})

result.x // ok now

如果您运行npm install typescript@next您可以自己测试此代码。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM