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