Типизируй функцию getParam так, чтобы TypeScript сам подсвечивал наличие свойств в объекте. Сделай типизацию так, чтобы нельзя было передавать массивы.

Используйте K extends keyof T и возвращаемый тип T[K], а массивы исключите условным типом параметра. Это сохранит подсказки ключей объекта.

Короткий ответ

Что ответить на собеседовании

Используйте K extends keyof T и возвращаемый тип T[K], а массивы исключите условным типом параметра. Это сохранит подсказки ключей объекта.

Подробный разбор

Ответ с пояснениями

Используйте K extends keyof T и возвращаемый тип T[K], а массивы исключите условным типом параметра. Это сохранит подсказки ключей объекта.

function getParam<T extends object, K extends keyof T>(
  obj: T & (T extends readonly unknown[] ? never : unknown),
  key: K
): T[K] {
  if (Array.isArray(obj)) throw new TypeError('Arrays are not supported');
  return obj[key];
}

const age = getParam({ name: 'Иван', age: 30 }, 'age');
// age: number

Readonly-массивы также исключаются. Статические ограничения можно обойти через any или потерю точного типа, поэтому runtime-проверка сохраняется.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее