![](/img/trans.png)
[英]Inferring individual types when using union type generics (extending react component props)
[英]Inferring generics when using extends
今天,我遇到了這種類型:
interface Base {
one: number;
two: number;
}
export type SelectSubset<T, U> = {
[key in keyof T]: key extends keyof U ? T[key] : never
}
type TQuestion = <T extends Base>(args: SelectSubset<T, Base>) => void
const example: TQuestion = (obj) => {}
我非常不確定為什么在這個例子中可以推斷出泛型T
的類型。 我看到T
被限制為 Base 但假設我必須為編譯器傳遞一個默認值才能確定 T 解析為什么。 我假設編譯器只是假設T
具有未傳遞顯式類型的Base
類型?
在您發布的代碼段中,編譯器不需要進行真正的推斷。
在這一行——
const example: TQuestion = (obj) => {};
您只定義了 TQuestion 類型的TQuestion
,此處無需進行推斷。 由於obj
參數上沒有明確提及類型,因此它是從TQuestion
類型中提取的。 這相當於-
function example<T extends Base>(obj: SelectSubset<T, Base>): void {}
如果你這樣做了——
const example = (obj) => {};
編譯器會抱怨obj
缺少類型並且具有隱式any
類型(假設您將“無隱式任何”設置設置為 true)。 這里,一個類型完全缺失,但是當你聲明example
為TQuestion
類型時,你存儲在其中的 function應該是TQuestion
類型,這就是obj
參數自動獲取類型SelectSubset<T, Base>
的原因
這些約束的實際推斷和類型檢查只有在您實際調用 function 時才會發揮作用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.