So verstehen Sie die TypeScript-Schnittmenge durch keyof
P粉451614834
P粉451614834 2023-09-05 22:37:33
0
1
391
<p><pre class="brush:php;toolbar:false;">interface Person { Name: Zeichenfolge; } Schnittstelle Lebensdauer { Geburtsdatum; Todesdatum; } Typ PersonSpan = Person & Lifespan; Typ K = keyof PersonSpan; // Typ K = "Geburt" let prop: K = "name"; // ok let obj: PersonSpan = { // Kompilierungsfehler, fehlende Geburts- und Todeseigenschaften Name: "John Smith" }</pre> <p>Wenn ich Typüberschneidungen über <code>keyof</code> verstehen möchte: </p> <p>Der Schlüssel<code>{ name: „John Smith“ }</code> dieser Objektinstanz ist <code>name</code>, der mit dem <code>keyof PersonSpan</code> übereinstimmt. , also <code> „birth“ |. „death“ </code>, es ist gültig, <code>let prop: „name“ | „Geburt“ |. „Tod“ = „Name“; <p>Solange das Objekt also eine dieser drei Eigenschaften hat, sollte es gültig sein. Warum muss es dann trotzdem alle Eigenschaften haben, die <code>PersonSpan</code> zuweisbar sind? </p>
P粉451614834
P粉451614834

Antworte allen(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"
}
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!