Машинописный текст возвращает данные свойства интерфейса, определение возвращаемого типа

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

Вот мой подход: Кодирование

Там я получаю только тип объединения всех свойств интерфейса, однако я должен вернуть тип свойства, которое я хочу вернуть.

Вы должны использовать ту же технику, что и на игровой площадке для машинописного текста: универсальный, который расширяет keyof. Кстати, есть шанс, что вы разместили неправильную ссылку на площадку: она не имеет ничего общего с вашим кодом.

zerkms 25.12.2020 01:15

привет, я не совсем уверен, что вы имеете в виду, не могли бы вы объяснить подробнее? Я нажал на ссылку, по крайней мере для меня она перенаправляет на тот же код.

marius 25.12.2020 01:38

Игровая площадка Typescript сохраняет последний код, который вы написали на сайте. Вы видите правильный код, потому что это был последний фрагмент кода, который вы написали, но больше никто этого не видит, поскольку ваша ссылка не экспортируется правильно.

Aplet123 25.12.2020 01:50

Хорошо, я изменил его, теперь вы должны увидеть правильный код.

marius 25.12.2020 02:18
Зод: сила проверки и преобразования данных
Зод: сила проверки и преобразования данных
Сегодня я хочу познакомить вас с библиотекой Zod и раскрыть некоторые ее особенности, например, возможности валидации и трансформации данных, а также...
Как заставить Remix работать с Mantine и Cloudflare Pages/Workers
Как заставить Remix работать с Mantine и Cloudflare Pages/Workers
Мне нравится библиотека Mantine Component , но заставить ее работать без проблем с Remix бывает непросто.
Угловой продивер
Угловой продивер
Оригинал этой статьи на турецком языке. ChatGPT используется только для перевода на английский язык.
TypeScript против JavaScript
TypeScript против JavaScript
TypeScript vs JavaScript - в чем различия и какой из них выбрать?
Синхронизация localStorage в масштабах всего приложения с помощью пользовательского реактивного хука useLocalStorage
Синхронизация localStorage в масштабах всего приложения с помощью пользовательского реактивного хука useLocalStorage
Не все нужно хранить на стороне сервера. Иногда все, что вам нужно, это постоянное хранилище на стороне клиента для хранения уникальных для клиента...
Что такое ленивая загрузка в Angular и как ее применять
Что такое ленивая загрузка в Angular и как ее применять
Ленивая загрузка - это техника, используемая в Angular для повышения производительности приложения путем загрузки модулей только тогда, когда они...
0
4
67
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы должны сделать getData универсальным, а затем повторно использовать универсальный тип как для аргумента, так и для возвращаемого значения:

interface Rofl {
  name:string,
  id:number,
}

const data: Rofl = {
  name:"lol",
  id:1,
};

function getData<T extends keyof Rofl>(property: T): Rofl[T] {
  return data[property];
}


const lol:string = getData("name");

https://www.typescriptlang.org/play?ssl=16&ssc=29&pln=16&pc=33#code/JYOwLgpgTgZghgYwgAgEoHsYBtkG8CwAUMsiHALYQBcAzmFKAOYA0RJwAJlSAK7kBG0VoQC+RIgnQg6yDnDBwqaTDg C8eNqQrUARFnRYdw9lwCMwkQG5xhGDxAIwwKckYQwAEXlwAPABVkCAAPSBAOGmQAawgAT0xlbAA+AAoAByh0VOgwGKU-AEolDGwAbT8AXQ1iZCh3HigQWW8S9MzsmPLrURsJKRl9LFp6JmR1N09vZJ0y Sh18rt7pAwgAOn1GZIH5oA

это именно то, что я искал! спасибо :)

marius 25.12.2020 02:36

Другие вопросы по теме