Как получить тип ключа интерфейса в универсальной функции?

#reactjs #typescript

#reactjs #typescript

Вопрос:

У меня есть универсальная функция, которая извлекает некоторые данные:

 function getData<T extends A | B | C>(initial: T[]): T[] {
  const [data, setData] = useState<T[]>([]);

  useEffect(() => {
    ...some query
    setData(query result);

  }, []);

  return data;
}

interface A {
  someKeyA: string;
}

interface B {
  someKeyB: number;
}

interface C {
  someKeyC: A;
}
 

В другой вспомогательной функции для запроса мне нужно получить типы ключей T. Если исходный массив данных не пуст, я могу это сделать, и это работает

 const _key = typeof data[0].["someKeyA" as keyof T];
 

Но иногда начальный массив данных пуст, а затем происходит сбой, потому что data[0] не определено.

Что мне нужно, так это получить K extends keyof T, если данные не переданы. Возможно ли получить ключ typeof из универсального интерфейса по значению ключа или, возможно, создать какой-либо временный объект с типом T?

Комментарии:

1. Нет, типы не существуют во время выполнения (удаляются во время компиляции)

2. @AlekseyL.Ok, так и думал, но не был уверен. Решил жестко запрограммировать некоторые значения ключа и по умолчанию установил rest.