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

Всем привет! помогите, пожалуйста, имею следующую функцию: ``` export async function withRedisConnection<T =

void>(
connections: {read?: boolean, write?: boolean},
action: typeof connections extends {read: true, write: true} ? TwoClientsAction<T> : OneClientAction<T>,
) {
.
.
.
const result = await (stableConnections.length === 1
? action(stableConnections[0])
: (action as TwoClientsAction<T>)(stableConnections[0], stableConnections[1])
);
.
.
.
}
```

и следующие типы:
```
type RedisClient = RedisClientType<RedisModules, RedisScripts>
type OneClientAction<T> = (client: RedisClient) => Promise<T>
type TwoClientsAction<T> = (client: RedisClient, client2: RedisClient) => Promise<T>
```

почему-то с точки зрения ТС функция action может иметь только один агрумент, хотя у нее Conditional Type, и только при явном касте в тип она без ошибок принимает второй.
Подскажите, пожалуйста, как мне написать тип так, чтобы этот каст не требовался, если это возможно

3 ответов

11 просмотров

1) Тип connections вынести в дженерик 2) Проверка внутри функции неверная, должно проверяться то же условие что в типах

Anton-Vityazev Автор вопроса
Iurii Mamaev
1) Тип connections вынести в дженерик 2) Проверка ...

Юрий, спасибо! а можно подробнее, пожалуйста? не уверен, что понял

Anton Vityazev
Юрий, спасибо! а можно подробнее, пожалуйста? не у...

https://www.typescriptlang.org/play?target=99&jsx=0#code/C4TwDgpgBAShAmBLAzgYQDaIgO2FAvFNgK4C2ARhAE4DcAUHQMYD22ye7AhuehKq9giNgiVsgBcsBCgxZcAbQC6BKPICMAGigAmLQGZF9OhAAeYZlTws2eAO6JgACzhI0AoSNYrOyENkZQADwAKlCmwDjwyFAA3lBUEJzwAPyS5MzMvJzYNFC2VA4QqVDpmYnYUAC+AHwAFHRQjVDWgsKibJLBGg1NnG2snWEmEdhRsfGJ8JLAVMQQufmF07PQlVDJUMG2zLI4wMgAgv0VkgDygru4R57Y3QCUBNWxPY3W7BPIxOh4hJy2nA4oLUWh52sgAHQJJJQABkMOa7mOEMWEReTUaG1qfRuUB8m22l3213ad1qXB4fERN2Q8gADIotOTePxsK1qepFHc0ejJNj2mTgNxmVSwXTOWi7vRKgxQJAoOc+Jg9sSvIRgUrcJIXDINcAHvgngAFKjMUgoCCBbIgap0WXQLY7XWHY4qdVyYBa6RoXVaRi67Se1yE-VGk1m5AWq3VIA

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

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

30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Недавно 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
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
Всем привет! Имеется функция: function IsValidChar(ch: UTF8Char): Boolean; var i: Integer; ValidChars: AnsiString; begin ValidChars := 'abcdefghijklmnopqrstuvwxyzABCDE...
Евгений
44
Карта сайта