Безопасное присвоение объекту по ключу из строки - PullRequest
1 голос
/ 17 октября 2019

Я пытаюсь выяснить, как создать функцию установщика машинописного текста, которая получает объект, ключ этого объекта и значение, назначаемое для этой клавиши.

Вот что я имею до сих пор:

const setter = <T, K extends keyof T>(obj: T, key: K, value) => {
  obj[key] = value
}

const obj = {
  a: 1,
  b: 'two',
}

setter(obj, 'a', 2) // works fine
setter(obj, 'c', 3) // correctly fails since `obj` does not have a `c` prop
setter(obj, 'b', 4) // works but should not be possible

Как я могу набрать эту функцию так, чтобы value соответствовал типу в T[K]?

1 Ответ

1 голос
/ 17 октября 2019

Конечно, просто наберите value как T[K]

<T, K extends keyof T>(obj: T, key: K, value: T[K])
...