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 ответов

37 просмотров

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 разных вещи и ТС не нацелен смотреть что написано у тебя в коде, можно попробовать написать обратный сопоставленный тип, но это займет много времени и совсем не нужно, больше как академическая задача

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

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

30500 за редактор? )
Владимир
47
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
вы делали что-то подобное и как? может есть либы готовые? увидел картинку нокода, где всё линиями соединено и стало интересно попробовать то же в ddl на lua сделать. решил с ч...
Victor
8
Подскажите пожалуйста, как в CustomDrawCell(Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean); получить наз...
A Z
7
Ребят в СИ можно реализовать ООП?
Николай
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
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
1
Он в одиночку это дело запилил или была какая-то команда?
Aquinary
12
~ 2m21s  nix shell github:nixos/nixpkgs#stack ~  stack ghc -- --version error: … while calling the 'derivationStrict' builtin at /builtin/derivation.nix:...
Rebuild your mind.
6
Всем привет, нужна как никогда, нужна помощь с IO в загрузчике. Пишу в code16 после установки сегментных регистров, пишу вывод символа. Пробовал 2 варианта: # 1 mov $0x0E, %a...
Shadow Akira
14
Карта сайта