@Fedooot01

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

Здравствуйте!

Есть такой код:
interface WhenChange<T> {
	field: keyof T
	value: T[keyof T]
}

interface User {
   name: string
   age: number
   validate: boolean
}

type WhenUserChanged = WhenChange<User>

let data = {}
function handleChange({field, value}: WhenUserChanged) {
  data = {
   [field]: value,
  }
}

handleChange({
   field: 'age',
   value: true
})


Проблема в том, что что когда вызывается handleChange для field срабатывает проверка и написать туда можно только number, age, validate, а вот value не подбирается тип по названию и для age можно написать и строку и boolean и number.

Подскажите, пожалуйста, как написать дженерик так, чтобы для age эта функция ждала только number, для name - string и т. д?
  • Вопрос задан
  • 71 просмотр
Решения вопроса 1
Alexandroppolus
@Alexandroppolus
кодир
а точно нужен объект WhenChange?
если вместо одного объекта передавать в функцию аргументы по отдельности, то всё просто
interface User {
   name: string
   age: number
   validate: boolean
}

let data = {}

function handleChange<K extends keyof User>(field: K, value: User[K]) {
  data = {
   [field]: value,
  };
}

handleChange('validate', true);


с объектом такое не прокатывает, приходится резолвить генерик вручную
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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