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

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

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

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

11 ответов

21 просмотр

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

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

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

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

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

а через ESC-код ?
Alexey Kulakov
29
30500 за редактор? )
Владимир
47
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
program test; {$mode delphi} procedure proc(v: int32); overload; begin end; procedure proc(v: int64); overload; begin end; var x: uint64; begin proc(x); end. Уж не знаю...
notme
6
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
вы делали что-то подобное и как? может есть либы готовые? увидел картинку нокода, где всё линиями соединено и стало интересно попробовать то же в ddl на lua сделать. решил с ч...
Victor
8
Ребят в СИ можно реализовать ООП?
Николай
33
Подскажите пожалуйста, как в CustomDrawCell(Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean); получить наз...
A Z
7
Карта сайта