← Alle AufgabenTypeScript · Junior

keyof: pluck

pluck(items, key) liefert ein Array der Werte eines Felds: pluck(users, "name") ergibt ["Ann", "Bob"].

Typisiere es so, dass key nur ein echtes Feld der Objekte sein kann (ein Tippfehler ist ein Kompilierfehler) und das Ergebnis den Typ dieses Felds hat: string[] für name, number[] für id.

Tests (6)

Typtests prüft der TypeScript-Compiler im strict-Modus. Expect<Equal<A, B>> besteht, wenn die Typen exakt gleich sind, und // @ts-expect-error, wenn die nächste Zeile nicht kompiliert. Der erste Start lädt den Compiler und dauert daher ein paar Sekunden.

  1. Typen
    const users = [{ id: 1, name: 'Ann' }, { id: 2, name: 'Bob' }];
    const names = pluck(users, 'name');
    type _ = Expect<Equal<typeof names, string[]>>;
  2. Typen
    const users = [{ id: 1, name: 'Ann' }];
    const ids = pluck(users, 'id');
    type _ = Expect<Equal<typeof ids, number[]>>;
  3. Typen
    // @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([]);