Type Scriptのインデックス署名を徹底的に理解する


索引署名の意味
  • インデックス署名はtype scriptの文法糖
  • です.
  • インデックスとは、一定の指向に従って対応する値
  • を返すものである.
  • 例えば配列のインデックスは下付き0,1,2...である.
  • type scriptのインデックス署名には、デジタルインデックスと文字列インデックス
  • の2種類があります.
    数値インデックス:インタフェースを定義して配列に対する制約
    数値インデックスの本質は配列インデックスの検索形式と一致していますが、定義形式が異なるだけです.
    数値インデックスの配列に他のタイプが格納されている場合は、エラーが表示されます.
    //  ,            
    var arr=[1,2,'3',{name:"looper"}]
    console.log("         "+arr[0])
    
    //    
    //  :      ,     number  
    interface numberIndex{
        [index:number]:string
    }
    var numberTest: numberIndex=['1','2','3']//numberTest    numberIndex,       ,   string
    console.log('         '+numberTest[0])

    文字列索引:インタフェースを定義してオブジェクトに対する制約
    //  ,     key--->value,value       
    var obj={
        name:"looper",
        age:12
    }
    console.log("        "+obj.name)
    
    //     
    //  :      ,     string  
    interface strIndex{
        [index:string]:string
    }
    var strTest:strIndex={
        name:"looper--->     ",
        age:"12------>     ",
        sex:" ------>     "
    }//strTest    strIndex,       ,   string
    console.log("         "+strTest.name)

    ケース
    配列内の各数値の出現回数を統計して印刷
    デジタルインデックスによる実装
     let  comControl: { [code: string]: number } ={}//         
        let srr=[1,2,3,3,4,2,1,3,1]
        srr.forEach(x=>{
          if(Object.keys(comControl).filter(y=>y==x.toString()).length<1){
            comControl[x.toString()]=1
            return
          }
            comControl[x.toString()]++
        })
       for (let i in comControl){//      
        console.log(i+"      :"+comControl[i])
       }
    
        //1      :3
        //2      :2
        //3      :3
        //4      :1