Используйте K extends keyof T и возвращаемый тип T[K], а массивы исключите условным типом параметра. Это сохранит подсказки ключей объекта.
Типизируй функцию getParam так, чтобы TypeScript сам подсвечивал наличие свойств в объекте. Сделай типизацию так, чтобы нельзя было передавать массивы.
Используйте 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-проверка сохраняется.