平時工做自認爲有 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