Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

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,后面直接用来组合即可