一個 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

相關文章
相關標籤/搜索