[1.19]タイプスクリプト-ユーティリティ(Partial)

6847 ワード

Partial

  • Partial
  • 部品の動作原理
  • Partial


    Partialは、特定のタイプのサブセットを満たすタイプを定義することができる.
    必要な情報だけを見ているPickとは異なり、Partialは商品情報(putなどのキャラクター)を更新する際に使用されるものと見なすことができます.
    //기존 Product 인터페이스
    interface Product {
      id : number;
      name : string;
      price : number;
      brand : string;
      stock : number;
    }
    
    interface UpdateProduct {
      id? : number;
      name? : string;
      price? : number;
      brand? : string;
      stock? : number;
    }
    Partialを使わなくても?繰り返し処理した結果,選択的に適用できる.
    しかし、Partialを使用すると、既存の製品インタフェースを再利用することができ、コードの重複を回避し、表現をより簡潔にすることができます.
    type UpdateProduct = Partial<Product>
    function updateProductItem(productItem:Partial<Product>){
    }

    部品の運動原理


    VisualStudioが提供するタイプのスクリプトPartialの形式から見ると、
    (コマンドまたはaltを押しながらPartialをクリックして確認)

    UserProfileという名前のインタフェースと、変更するUserProfile Updateのインタフェース
    2つを例に,partialの動作原理を上記のように解析した.
  • 基本型
  • interface UserProfile {
      username : string,
      email : string,
      profilePhotoUrl : string
    }
    interface UserProfileUpdate {
      username? : string,
      email? : string,
      profilePhotoUrl? : string
    }
  • UserProfileのインデックスに従ってアクセスし、上に作成したUserProfileUpdateインタフェースをタイプ別名に変換します.すなわち、上記のインタフェースではなくタイプ別名が作成されます.
  • type UserProfileUpdate = {
      username? : UserProfile['username'],
      email? : UserProfile['email'],
      profilePhotoUrl? : UserProfile['profilePhotoUrl']
    }
  • アレイのinオペレータを使用して重複文の概念を回転させ、上記の値をより簡単に表現することができる.UserProfileUpdate各キーはfor inゲートで重複していますが、条件は?貼ればいい
    これをmappedtypeと呼びます.
    △次のブログ記録では、より詳細に議論します.
  • type UserProfileUpdate = {
      [ p in 'username' | 'email' | 'profilePhotoUrl']? : UserProfile[p]
    }
    以上の条件はkeyofによりさらに短縮できる.
    現在、完全な協力タイプではなく、協力タイプを減らす方法です.
    type UserProfileKeys = keyof UserProfile
    4.上記で使用したkeyofを代入すると、タイプスクリプトで説明したpartialの形式とますます似ていることがわかります.
    type UserProfileUpdate = {
      [p in keyof UserProfile]? : UserProfile[p]
    }
  • にジェニーンリックタイプの「T」を入れると、完全なPartialが形成されます.
  • type Subset<T> = {
      [ p in keyof T]? : T[p]
    }