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

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

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

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

11 ответов

25 просмотров

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

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˸̧̨ ͅ ̤ ̬̪
Это к чему было? Я ни слова про классы не сказал К...

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

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

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

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта