← 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.

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.

  1. typy
    const users = [{ id: 1, name: 'Ann' }, { id: 2, name: 'Bob' }];
    const names = pluck(users, 'name');
    type _ = Expect<Equal<typeof names, string[]>>;
  2. typy
    const users = [{ id: 1, name: 'Ann' }];
    const ids = pluck(users, 'id');
    type _ = Expect<Equal<typeof ids, number[]>>;
  3. typy
    // @ts-expect-error - users have no email
    pluck([{ id: 1, name: 'Ann' }], 'email');
  4. const users = [{ id: 1, name: 'Ann' }, { id: 2, name: 'Bob' }];
    expect(pluck(users, 'name')).toEqual(['Ann', 'Bob']);
  5. expect(pluck([{ id: 1 }, { id: 2 }], 'id')).toEqual([1, 2]);
  6. expect(pluck([], 'id')).toEqual([]);