squadbrodyaga
@squadbrodyaga
帆は風を変えた

Как сделать, чтобы тип аргумента совпадал с типом передаваемого ключа?

Есть функция:
function magicFunc<T extends object>(array: T[], key: keyof T, value: ...) { ... }


Я хочу чтобы тип аргумента value совпадал с типом ключа, название которого передаётся в аргумент key.

Проще говоря, я хочу видеть такое поведения от своего редактора кода:
// Условный массив объектов
const myArray = [
  { id: 1, name: 'Добрыня', age: 40},
  { id: 2, name: 'Алёша' age: 23},
  { id: 2, name: 'Былина', age: 35}
]

magicFunc(myArray, 'age', 'Добрыня') 
// ❌ошибка, тип значения 'Добрыня' не совпадает с типом свойства 'age'  

magicFunc(myArray, 'id', 'Былина')
// ❌ ошибка, тип значения 'Добрыня' не совпадает с типом свойства 'id' 

magicFunc(myArray, 'name',  'Алёша')
// ✅ Всё хорошо

magicFunc(myArray, 'id', 1)
// ✅ Всё хорошо
  • Вопрос задан
  • 64 просмотра
Решения вопроса 2
yarkov
@yarkov
Помог ответ? Отметь решением.
Недавно таким же вопросом задавался. Посмотрите ответ. Там учитываются ключи вложенные, не только первого уровня.
https://qna.habr.com/q/1173460
Ответ написан
Комментировать
squadbrodyaga
@squadbrodyaga Автор вопроса
帆は風を変えた
Мда, ChatGPT дал ответ с нужным результатом, всем спасибо, продолжаем ждать восстания машин.
function magicFunc<T extends object, K extends keyof T>(array: T[], key: K, value: T[K]) {
    // ...
  }


UPD: У кого есть альтернативные способы – пишите, отмечу решением
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы