ts索引类型(keyof)
原始版
interface Obj {
x: number;
y: number;
z: number
}
let o: Obj = {
x: 1,
y: 2,
z: 3
}
function getValue(obj: any, keys: string[]) {
return keys.map(key => obj[key]);
}
console.log(getValue(o, ["x", "y"])); //正常打印
- 我们如何确保,输入的keys里面不会包含非法key呢?
- 需要使用 keyof 取得类型做约束
改进版
function getValue<T, K extends keyof T>(obj: T, keys: K[]): T[K][] {
return keys.map(key => obj[key]);
}
- 这里配置了 obj的类型为T,从而得到 key的类型为K,后面直接用来组合即可