Задать вопрос
@Grishalovesfront

Как сделать generic для value объекта?

Всем доброго времени суток! Учу тайпскрипт, пока только изучаю и пробую себя, в целом типизация для меня что-то новое, и у меня вопрос.

Есть такой код
type myObjectTypes = {
 name:  string;
 number:  number
}

type myObjectKeys = keyof myObjectTypes;

const myObject: myObjectTypes = {
 name: 'Alex',
 number: 1337
}


const myFunction = (key:  myObjectKeys): <???> => myObject[key as string];


Собственно просто функция которая будет возвращать value объекта по ключу. А вопрос в том, что надо написать в <???> что бы я знал какой тип вернется по этому ключу, что то типа
keyof myObjectTypes, только для его value по ключу который я передаю. Не могу разобраться :)
Заранее спасибо!
  • Вопрос задан
  • 176 просмотров
Подписаться 1 Простой 1 комментарий
Решения вопроса 1
Alexandroppolus
@Alexandroppolus
кодир
Ссылка

const myFunction = <K extends keyof MyObjectTypes>(key: K): MyObjectTypes[K] => myObject[key];


суть: передаем в myFunction значение, которое может быть только одним из ключей MyObjectTypes (ограничение extends keyof MyObjectTypes)
по этому переданному значению определяется конкретное К - сужение типа до одного ключа.
ну и далее MyObjectTypes[K] по этим данным уже точно знает свой тип.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
WblCHA
@WblCHA
Во-первых, [key as string] - это ошибка, должно быть просто [key].
Во-вторых, помимо того, что Alexandroppolus в своём ответе указал, можно вообще не указывать возвращаемый тип, тс сам его определит.
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы