typescript

    技术2022-09-01  97

    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"]);//报错
    Processed: 0.012, SQL: 9