検索

ホームページ  >  に質問  >  本文

keyof を介して TypeScript の交差を理解する方法

<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粉451614834P粉451614834437日前432

全員に返信(1)返信します

  • P粉267791326

    P粉2677913262023-09-06 20:12:26

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

    リーリー

    返事
    0
  • キャンセル返事