如何透過 keyof 理解 TypeScript 交集
P粉451614834
P粉451614834 2023-09-05 22:37:33
0
1
428
<p><pre class="brush:php;toolbar:false;">interface Person { name: string; } interface Lifespan { birth: Date; death: Date; } type PersonSpan = Person & Lifespan; type K = keyof PersonSpan; // type K = "name" | "birth" | "death" let prop: K = "name"; // ok let obj: PersonSpan = { // compile error, missing birth and death properties name: "John Smith" }</pre> <p>如果我想透過<code>keyof</code>理解類型交集:</p> <p>此物件實例的鍵<code>{ name: "John Smith" }</code> 是<code>name</code>,它與<code>keyof PersonSpan</code> 相符,即<code> “姓名”| “出生” | “death”</code>,執行<code>let prop: "name" | 是有效的。 「出生」 | “死亡”=“名字”; </code></p> <p>所以只要物件具有這三個屬性之一就應該有效,為什麼它仍然需要具有可指派給 <code>PersonSpan</code> 的所有屬性? </p>
P粉451614834
P粉451614834

全部回覆(1)
P粉267791326

在 TypeScript 中,當您使用兩個或多個類型的交集 & 定義類型時,產生的類型將具有每個交集類型的所有屬性。在本例中,PersonSpan 被定義為 Person 和 Lifespan 的交集,因此 PersonSpan 類型的物件必須具有 Person 和 Lifespan 的所有屬性。即使keyof PersonSpan 結果是“name” | “出生” | “death”,這並不意味著任何僅具有這些屬性之一的物件對PersonSpan 有效,它意味著您初始化的這個類型K 是PersonSpan 屬性名稱的並集,您可以使用鍵「name」存取這些屬性PersonSpan 類型的物件上的、「出生」或「死亡」也可能是您正在尋找的Partial 類型,它使所有props 都是可選的

let obj: Partial<PersonSpan> = {  
   name: "John Smith"
}
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板