keyof を介して TypeScript の交差を理解する方法
P粉451614834
P粉451614834 2023-09-05 22:37:33
0
1
431
<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>
P粉451614834
P粉451614834

全員に返信(1)
P粉267791326

TypeScript では、2 つ以上の型の交差 & を使用して型を定義すると、結果の型には各交差型のすべてのプロパティが含まれます。この場合、PersonSpan は Person と Lifespan の共通部分として定義されるため、タイプ PersonSpan のオブジェクトは Person と Lifespan のすべてのプロパティを持たなければなりません。 keyof PersonSpan の結果が "name" | "birth" | "death" となったとしても、これらのプロパティの 1 つだけを持つオブジェクトが PersonSpan に対して有効であることを意味するわけではなく、初期化した型 K が PersonSpan の和集合であることを意味します。プロパティ名を設定すると、タイプ PersonSpan、「誕生」または「死」のオブジェクトでキー「名前」を使用してこれらのプロパティにアクセスできます。これは、探している部分タイプである可能性もあり、すべてのプロパティがオプションになります

リーリー
いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート