← Усі задачіTypeScript · Junior

Дженерики: first і last

Функції first(items) і last(items) повертають перший і останній елемент масиву. Зараз вони приймають і повертають any, тож результат втрачає тип.

Зробіть їх дженериками: для number[] результат має бути number | undefined, а для масиву as const - об'єднання його літералів. Порожній масив дає undefined.

Тести (6)

Тести типів перевіряє компілятор TypeScript у режимі strict. Expect<Equal<A, B>> проходить, коли типи збігаються точно, а // @ts-expect-error - коли наступний рядок не компілюється. Перший запуск завантажує компілятор, тож триває кілька секунд.

  1. типи
    const n = first([1, 2, 3]);
    type _ = Expect<Equal<typeof n, number | undefined>>;
  2. типи
    const s = last(['a', 'b'] as const);
    type _ = Expect<Equal<typeof s, 'a' | 'b' | undefined>>;
  3. типи
    const e = first([] as string[]);
    type _ = Expect<Equal<typeof e, string | undefined>>;
  4. expect(first([1, 2, 3])).toBe(1);
    expect(last([1, 2, 3])).toBe(3);
  5. expect(first([])).toBe(undefined);
    expect(last([])).toBe(undefined);
  6. expect(last(['only'])).toBe('only');