场景:
封装一个函数,第一个参数如 {a:{a:'sdfsdf'},b:{c:'sdfsdf'}},第二个参数为一个数组["a","b"],其中"a"和"b"必须时第一个参数中的key,返回结果为使用第二个参数数组筛选处第一个对象key值符合的对象组合成一个新数组。
我们要做到,第二个参数中有不符合第一个参数键值的报错,返回值循环时有item的类型推导,且不限制第一个参数每个键值对应的value
具体做法:
实现原理:
先约束入参data的类型为 D = {[k:string]:{[k:string]:string}},提取D到泛型中,提取泛型D中的value值到泛型T中,这时候变量s的类型需要想办法和data的类型关联起来,keyof D 值的时使用D类型的key值类型,这时候如果s数组中有一个不属于D类型键值的时候即会报错,如图一。这里的返回值我们利用ts的自动推导,无需处理其类型,即可推导出每一项的类型,如图二。
总结:
泛型的作用是关联多个参数之间的关系,可以想象成是类型中的函数参数