keyof を介して TypeScript の交差を理解する方法
P粉451614834
2023-09-05 22:37:33
<p><pre class="brush:php;toolbar:false;">インターフェイス パーソン {
名前: 文字列;
}
インターフェースの寿命 {
生年月日;
死亡日: 日付。
}
type PersonSpan = 人および寿命;
type K = keyof PersonSpan; // type K = "名前" | "誕生" | "死亡";
let prop: K = "名前"; // OK
let obj: PersonSpan = { // コンパイル エラー、出生と死亡のプロパティが欠落しています
名前:「ジョン・スミス」
}</pre>
<p><code>keyof</code> による型の交差を理解したい場合: </p>
<p>このオブジェクト インスタンスのキー<code>{ name: "John Smith" }</code> は <code>name</code> であり、PersonSpan の <code>key</code> と一致します。つまり、<code> "name" | "birth" | "death" </code> の場合、<code>let prop: "name" | を実行するのは有効です。 "誕生" | "死亡" = "名前"; </code></p>
<p>では、オブジェクトがこれら 3 つのプロパティのいずれかを持っている限り、オブジェクトは有効であるはずですが、なぜ依然としてすべてのプロパティを <code>PersonSpan</code> に割り当てる必要があるのでしょうか? </p>
TypeScript では、2 つ以上の型の交差 & を使用して型を定義すると、結果の型には各交差型のすべてのプロパティが含まれます。この場合、PersonSpan は Person と Lifespan の共通部分として定義されるため、タイプ PersonSpan のオブジェクトは Person と Lifespan のすべてのプロパティを持たなければなりません。 keyof PersonSpan の結果が "name" | "birth" | "death" となったとしても、これらのプロパティの 1 つだけを持つオブジェクトが PersonSpan に対して有効であることを意味するわけではなく、初期化した型 K が PersonSpan の和集合であることを意味します。プロパティ名を設定すると、タイプ PersonSpan、「誕生」または「死」のオブジェクトでキー「名前」を使用してこれらのプロパティにアクセスできます。これは、探している部分タイプである可能性もあり、すべてのプロパティがオプションになります
リーリー