15.typescript筆記_索引類型

1.索引類型

let obj = {
    a : 1 ,
    b : 2 ,
    c : 3 ,
};
function getKey(obj : any , keys : string[]){
    return keys.map((key)=>obj[key]);
}
//指定所包含的屬性
console.log(getKey(obj,["a" , "b"]));
//放入不包含的屬性,正常情況我們希望這種要報錯
console.log(getKey(obj,["c","f"]));

1.2 接下來學習幾種方法概念

// keyof T
interface Obj {
    a : number ;
    b : number ;
};
let key : keyof Obj;// 自動轉換成 let key: "a" | "b"

// 索引訪問操作符合 T[K]
let value : Obj["a"];//自動轉換成 let value: number

// T extends U 
// 類型的繼承

1.3 學完上面幾種方法概念後,我們將上面的函數進行改造,如果傳入的字符串不包含所屬屬性,那麼將報錯

function _getKey<T , K extends keyof T>(obj : T , keys : K[]) : T[K][]{
    return keys.map((key : K)=>obj[key]);
}

1.4 分析 從左往右看,T是約束obj的, K繼承了 T的聯合類型,所以此時K是聯合類型, T[K][],聯合類型的返回值數組

let _obj = {
    a : 1,
    b : 2,
    c : '3'
}
_getKey(_obj , ["a" , "b"]);
// _getKey(_obj , ["c" , "E"]);//報錯
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章