Wzorce
Jak wybrać jedną właściwość z każdego obiektu i zachować jej typ w zwracanej tablicy?
Zwiąż klucz z `keyof T` i użyj dostępu indeksowanego dla elementu wyniku.
Przepis
function pluck<T, K extends keyof T>( items: readonly T[], key: K, ): T[K][] { return items.map(item => item[key]) } const people = [ { id: 1, name: 'Ada' }, { id: 2, name: 'Lin' }, ] const names = pluck(people, 'name') const ids = pluck(people, 'id')
Build to kompiluje i sprawdza każdy wynik poniżej.
Jak to działa
- 01
K extends keyof T
Wybrana właściwość musi istnieć na każdym elemencie opisanym przez `T`.
- 02
T[K][]
Wybrany klucz określa typ elementu zwracanej tablicy.
Co dostajesz
typeof names→string[]typeof ids→number[](typeof names)[number]
→string
Gdzie to zawodzi
Dla unii obiektów o różnych kształtach `keyof T` zawiera tylko klucze bezpieczne dla każdego składnika. Najpierw zawęź unię albo zamodeluj dyskryminowaną operację dla kluczy właściwych gałęziom.
Wniosek
Koreluj parametr klucza z `T[K]`, gdy wybór właściwości określa typ wyniku.
