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

Подскажите плиз почему ругается и как исправить? async function testWithGettersAsync<

G extends ((...args: any[]) => Promise<any>)[] | Record<PropertyKey, (...args: any[]) => Promise<any>>,
>(func: (getter: G extends any[] ? G[number] : G[keyof G], type: string) => Promise<any>, getters: G) {
if (Array.isArray(getters)) {
for (let idx = 0; idx < getters.length; idx++) {
await func(getters[idx], `value_${idx}`);
}
} else {
const entries = Object.entries(getters);

for (let idx = 0; idx < entries.length; idx++) {
await func(entries[idx][1], entries[idx][0]);
}
}
}


Ругается на первый параметр func. Хочется внутри func понимать, какие могут быть значения возвращены из getter

Playground

13 ответов

40 просмотров

playground

Кирилл-Глазунов Автор вопроса
rnamod1
playground

это не то, что нужно - так внутри func getter всегда будет возвращать Promise<any>, а не то, что в getters

Кирилл Глазунов
это не то, что нужно - так внутри func getter всег...

посмотри внимательнее, ты же хочешь func вызвать с тем что внутри getters, а это (...args: any[]) => Promise<any>

Кирилл-Глазунов Автор вопроса
rnamod1
посмотри внимательнее, ты же хочешь func вызвать с...

play вот что нужно было Вопрос ко всем: если в плейграунде убрать проверку на isFunction, начинает ругаться, если при этом из типа func убрать возвращаемый Promise - перестает ругаться (но промис нужен мне). Я решил тем, что в гварде isFunction поставил is Promise<any>, но я не понимаю, почему он ругается вообще

Кирилл-Глазунов Автор вопроса

Тип func определен: и параметры и результат, почему без гварда ругается? (Я его вообще для рантайма добавил...)

Кирилл Глазунов
Тип func определен: и параметры и результат, почем...

Argument of type 'PromiseFunc' is not assignable to parameter of type 'G extends any[] ? G[number] : ValueOf<G>' там же ошибка написана

Кирилл-Глазунов Автор вопроса
Владимир Акимов
Argument of type 'PromiseFunc' is not assignable t...

Написана, но G подчиняется ограничениям из generic: и G[number], и ValueOf<G> и равны PromiseFunc. И непонятно, почему проверка func на возвращаемый промисс убирает ошибку

Кирилл Глазунов
Написана, но G подчиняется ограничениям из generic...

аргумент func имеет тип G extends any[] ? G[number] : ValueOf<G> по коду ты туда передаешь PromiseFunc что должен сделать компилятор ?

Кирилл-Глазунов Автор вопроса

Оба выхода из тернарника дают PromiseFunk; более того, в ошибке, он из этого тернарника и определился (явно PromiseFunk нигде не передается, только в G

Кирилл-Глазунов Автор вопроса

Хм, т.е. аргументы func теперь ...args:any[]? В этом есть смысл

Кирилл-Глазунов Автор вопроса
Кирилл Глазунов
Хм, т.е. аргументы func теперь ...args:any[]? В эт...

Интересно то, что внутри func передаваемые типы getter определяются правильно (из фактически переданных вторым параметром в первую функцию)

Кирилл Глазунов
Оба выхода из тернарника дают PromiseFunk; более т...

не важно что дают оба выхода, ты тип описал для инстанса а не для реализации, декларация типа и реализация это 2 разных вещи и ТС не нацелен смотреть что написано у тебя в коде, можно попробовать написать обратный сопоставленный тип, но это займет много времени и совсем не нужно, больше как академическая задача

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

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

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
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
Карта сайта