← Усі задачіTypeScript · Junior
keyof: pluck
pluck(items, key) повертає масив значень одного поля: pluck(users, "name") дає ["Ann", "Bob"].
Опишіть типи так, щоб key можна було передати лише як справжнє поле об'єктів (опечатка - помилка компіляції), а результат мав тип цього поля: string[] для name, number[] для id.
Ctrl+Enter - запустити тести. Tab - відступ; щоб вийти з редактора клавіатурою, натисніть Esc, а потім Tab. Код зберігається в цьому браузері.
Тести (6)
Тести типів перевіряє компілятор TypeScript у режимі strict. Expect<Equal<A, B>> проходить, коли типи збігаються точно, а // @ts-expect-error - коли наступний рядок не компілюється. Перший запуск завантажує компілятор, тож триває кілька секунд.
- типи
const users = [{ id: 1, name: 'Ann' }, { id: 2, name: 'Bob' }]; const names = pluck(users, 'name'); type _ = Expect<Equal<typeof names, string[]>>;
- типи
const users = [{ id: 1, name: 'Ann' }]; const ids = pluck(users, 'id'); type _ = Expect<Equal<typeof ids, number[]>>;
- типи
// @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([]);