簡體   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