169 похожих чатов

Господа, подскажите пожалуйста. Как дать понять что возврат функции execute

должн быть как и входная fn ?

Сейчас эта функция вернёт Promise<void>, а должен быть Promise<return type fn>

11 ответов

5 просмотров

Насколько я знаю, промисы - очень сложный механизм, и без насильной подсказки тс умеет инферить тип только в очень простых случаях

Evgeniy- Автор вопроса
˸̧̨ ͅBlack Akula˸̧̨ ͅ ̤ ̬̪
Насколько я знаю, промисы - очень сложный механизм...

Через явный дженерик можно. Но вот глупо( Копировать тип функции через ReturnType когда он и так известен

Делал похожую штуку на реакте (реакт) хук import { useState } from 'react'; export function useApiRequest< R = unknown, P extends unknown[] = unknown[], E = unknown, >(requestCb: (...requestParams: P) => Promise<R>) { const [data, setData] = useState<R | null>(null); const [error, setError] = useState<E | null>(null); const [isLoading, setIsLoading] = useState<boolean>(false); const load = async (...params: P) => { try { setIsLoading(true); setData(null); setError(null); const res = await requestCb(...params); setData(res); } catch (e) { setError(e as E); setData(null); } finally { setIsLoading(false); } }; return { data, error, isLoading, load }; } Это типа хук который так вызываю const fetchAsteroidListRequest = useApiRequest( asteroidListApi.fetchAsteroidList, ); // и собственно вызов функции которая провоцирует вызов переданного в хук калбека fetchAsteroidListRequest.load(startDate, endDate); так вот по типизацию параметров эта функция выдергивает из переданного колбека а результат вызова передается в fetchAsteroidListRequest.data и он будет такого же типа как то что возвращает переданный в хук калбэк в принципе я со вью не работал но принцип вроде такой же должен быть

Evgeniy
Через явный дженерик можно. Но вот глупо( Копирова...

Условно, ТС/джс не знает, когда там ивент-луп "прокрутится". У каждого рантайма (хост-среды) своя реализация. И если resolve там спрятан где-то за таймаутом (не часть джс), ТС не может знать какой из resolve выполнится. Потому что ТС не знает, в какой хост-среде выполняется промис Ваш пример на ВУЕ переусложнен. Можно проще пример привести того, что тс не умеет промис без подсказки

˸̧̨ ͅBlack Akula˸̧̨ ͅ ̤ ̬̪
Условно, ТС/джс не знает, когда там ивент-луп "про...

я тебе больше скажу, тайпскрипта в рантайме вообще нет

Evgeniy- Автор вопроса

Не совсем то. У тебя работа идет с data. А я в data хочу класть нужные мне данные (через парсер получаются), но в добавок что бы load был по типу как и requestCb что бы в нужном кейсе я мог использовать "сырой" ответ т.к. в ответе на пример load я возвращаю нашу функцию обратно

Вот поэтому и большая часть джс не типизируется в ТС - от слова совсем. Взять хотя бы переопределение prototype объекта в рантайме

˸̧̨ ͅBlack Akula˸̧̨ ͅ ̤ ̬̪
Вот поэтому и большая часть джс не типизируется в ...

https://www.typescriptlang.org/docs/handbook/declaration-merging.html#module-augmentation

Evgeniy
Не совсем то. У тебя работа идет с data. А я в dat...

Ну можно второй дженерик попробовать добавить и привязать возвращаемое значение к нему как я дату привязываю у результату колбэка

Evgen K
https://www.typescriptlang.org/docs/handbook/decla...

Это к чему было? Я ни слова про классы не сказал Как ТС типизирует Object.setPrototypeOf(myObj, something) ? Я могу эту команду сотни раз в рантайме выполнить

˸̧̨ ͅBlack Akula˸̧̨ ͅ ̤ ̬̪
Это к чему было? Я ни слова про классы не сказал К...

ну так никакой язык с типизацией не дает гарантии то что касается метапрограммирования в рантайме

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

Обсуждают сегодня

Комрады, хотел уточнить. Проперть в OnDestroy юнита-хозяина по-прежнему доступна? И еще уточнение: finalization юнита наступает раньше или позже OnDestroy?
Ed Doc
48
А как старый хаскел с новым стыковать ? потому как тут работает https://play.haskell.org/saved/C3xpMzcd, а вот тут https://stepik.org/lesson/7602/step/9?unit=1473 нет ошибка C...
Fedor
56
Вопрос, вот задание https://stepik.org/lesson/7602/step/9?unit=1473 вот код и ошибка, удивляет, что требуется еще и Semigroup так и должно быть, или я опять делаю ошибки ? htt...
Fedor
14
Вообще, меня бы даже такой вариант, наверное устроил бы: try tag.Read(0); finally end; Но этот AV не ловится и программа завершается Exception EAccessViolation in module C...
notme
12
Проблема с Windows scripting control Множество объектов получают iDispatch обертки и отдаются в скрипты. При этом скрипты могут эти обертки держать живыми очень долго, наприм...
Arioch The
16
Скажите, можно ли как-то "переместить" динамический массив из одной переменной в другую? Скажем, переместить из TList<> в TArray<>. Именно переместить, а не скопировать. Если ...
Eugene Krasnikov (ᴊɪɴ x)
37
Да и вообще... как VBS/VBA производит вызов методов тогда? Как мне на Delphi сделать точно также, блин.... VBS/VBA не падают, а возвращают нормальный СОМ-объект, где можно про...
notme
10
Всем доброго времени суток! В BDE в своё время был файл BDEINST.dll который, как я понимаю, содержал всё что нужно для инсталляции BDE. Если посмотреть на дату его создания то...
Mikhail Tchervonenko
2
Я тут пытаюсь переработать архитектуру подсистемы памяти ядра во что-то осмысленное. Есть pmm, который создает набор range’ей(пока что только для ядра, потом для юзерспейса), ...
Evg Resh
9
комрады, че-та лыжы не едут var tmpFont: TFont; begin tmpFont:= TFont.Create; try case rgFontColor.ItemIndex of 0: tmpFont.Color:= clWindowText; 1: tmpFo...
Ed Doc
34
Карта сайта