Задать вопрос
Juniorrrrr
@Juniorrrrr

Как правильно типизировать функцию?

Как с использованием дженериков правильно типизировать функцию?

function preparedData<T, K extends keyof T>(data: T) {
  return Object.keys(data).map((key) => {
    return data[key as K].map((a) => ({   //здесь ошибка
      val: a.name,
      newId: a.id,
    }));
  });
}

На входе ожидаются данные типа

const obj = {
  key1: [
    {
      name: "name-1",
      id: "id-1",
    },
    {
      name: "name-2",
      id: "id-2",
    },
  ],
  key2: [
    {
      name: "name-1",
      id: "id-1",
    },
    {
      name: "name-2",
      id: "id-2",
    },
  ],
};

Отлавливаю во втором map ошибку "Свойство "map" не существует в типе "T[K]"".

Что не так делаю и как правильно обрабатывать такого рода кейсы?
  • Вопрос задан
  • 168 просмотров
Подписаться 2 Простой Комментировать
Решения вопроса 1
bingo347
@bingo347 Куратор тега TypeScript
Crazy on performance...
function preparedData<T extends Record<string, {name: string, id: string}[]>>(data: T) {
  return Object.keys(data).map((key) => {
    return data[key as keyof T].map((a) => ({
      val: a.name,
      newId: a.id,
    }));
  });
}

https://www.typescriptlang.org/play?#code/GYVwdgxg...
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы