[英]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.