一个 TypeScript keyof 泛型用法

平时工做自认为有 Swift Rust 经验, 因此不须要看 TypeScript 泛型方面的应用, 总觉得大同小异, 拒绝看文档学语言, 从我作起. 今日看到一个用上泛型的 pluck 函数typescript

function pluck<T, K extends keyof T>(o: T, names: Array<K>): T[K][] {
    return names.map(n => o[n]);
}
复制代码

有点懵逼, 查了一下 keyof 的应用.函数

const a = {
    a: 1,
    b: 2,
};
keyof typeof a; // 'a' | 'b'

class A {
    c: number;
    d: number;
}

keyof A; // 'c' | 'd'
复制代码

哦呼, 完蛋, 直接生成一个联合属性, 因此 pluck 函数 K 就是把 T 属性名做为字面量类型. K 就是 T 的属性名, 因此 T[K][] 这样的类型也好理解了.
至于字面量类型就是 TypeScript 能够把一个字符串看成一个类型ui

const a: 'a';
复制代码

TypeScript 的类型系统仍是蛮好玩的, 嗯哼就这样吧.spa

相关文章
相关标签/搜索