← Wszystkie zadaniaTypeScript · Junior
keyof: pluck
pluck(items, key) zwraca tablicę wartości jednego pola: pluck(users, "name") daje ["Ann", "Bob"].
Opisz typy tak, żeby key mógł być tylko prawdziwym polem obiektów (literówka to błąd kompilacji), a wynik miał typ tego pola: string[] dla name, number[] dla id.
Ctrl+Enter uruchamia testy. Tab robi wcięcie; aby wyjść z edytora klawiaturą, naciśnij Esc, a potem Tab. Kod zapisuje się w tej przeglądarce.
Testy (6)
Testy typów sprawdza kompilator TypeScriptu w trybie strict. Expect<Equal<A, B>> przechodzi, gdy typy są dokładnie takie same, a // @ts-expect-error, gdy następna linia się nie kompiluje. Pierwsze uruchomienie pobiera kompilator, więc trwa kilka sekund.
- typy
const users = [{ id: 1, name: 'Ann' }, { id: 2, name: 'Bob' }]; const names = pluck(users, 'name'); type _ = Expect<Equal<typeof names, string[]>>;
- typy
const users = [{ id: 1, name: 'Ann' }]; const ids = pluck(users, 'id'); type _ = Expect<Equal<typeof ids, number[]>>;
- typy
// @ts-expect-error - users have no email pluck([{ id: 1, name: 'Ann' }], 'email');
const users = [{ id: 1, name: 'Ann' }, { id: 2, name: 'Bob' }]; expect(pluck(users, 'name')).toEqual(['Ann', 'Bob']);
expect(pluck([{ id: 1 }, { id: 2 }], 'id')).toEqual([1, 2]);
expect(pluck([], 'id')).toEqual([]);