Size: a a a

Да, мы за DSBM

2020 November 08

NK

Nikita Kolmogorov in Да, мы за DSBM
Nikita Kolmogorov
оно появляется только с any
ну или с кастингом обязательным
источник

NK

Nikita Kolmogorov in Да, мы за DSBM
или с типами неправильными
источник

NK

Nikita Kolmogorov in Да, мы за DSBM
но все это ошибка человека, а не компилятора
источник

NK

Nikita Kolmogorov in Да, мы за DSBM
во всех строготипизированных языках беды с кастингом и аналогами any
источник

AK

Aleksandr Kraiz in Да, мы за DSBM
Раз уже говорим про TS, я тут недавно поставил telegraf поиграться. И там есть ctx.state (https://telegraf.js.org/#/?id=state), куда рекомендуется складывать данные.

Так вот ctx определяется классом TelegrafContext, в котором нет свойства state (компилятор ругается). Правильно ли будет сделать так для ликвидации ошибки?

interface TelegrafContextStated extends TelegrafContext {
 state: {
   chat: Chat;
 };
}

bot.use(async (ctx: TelegrafContextStated, next) => {
   const chat = { some obj };
   ctx.state.chat = chat;
 await next();
});
источник

A

Alexander° in Да, мы за DSBM
А там вроде есть всякие session
источник

A

Alexander° in Да, мы за DSBM
В чем разница?
источник

P

Purple in Да, мы за DSBM
Nikita Kolmogorov
приведи пример, пожалуйста, потому что я не могу такого придумать
Думая пришёл к вопросу, а в каких ситуациях на практике вообще может потребоваться возвращать разные типы данных
источник

NK

Nikita Kolmogorov in Да, мы за DSBM
Aleksandr Kraiz
Раз уже говорим про TS, я тут недавно поставил telegraf поиграться. И там есть ctx.state (https://telegraf.js.org/#/?id=state), куда рекомендуется складывать данные.

Так вот ctx определяется классом TelegrafContext, в котором нет свойства state (компилятор ругается). Правильно ли будет сделать так для ликвидации ошибки?

interface TelegrafContextStated extends TelegrafContext {
 state: {
   chat: Chat;
 };
}

bot.use(async (ctx: TelegrafContextStated, next) => {
   const chat = { some obj };
   ctx.state.chat = chat;
 await next();
});
вполне
источник

AK

Aleksandr Kraiz in Да, мы за DSBM
Alexander°
В чем разница?
Еще не понял. В доке они друг за другом идут. Буду читать.
источник

NK

Nikita Kolmogorov in Да, мы за DSBM
Purple
Думая пришёл к вопросу, а в каких ситуациях на практике вообще может потребоваться возвращать разные типы данных
когда нет возможности сделать суперкласс, например
источник

NK

Nikita Kolmogorov in Да, мы за DSBM
Aleksandr Kraiz
Еще не понял. В доке они друг за другом идут. Буду читать.
это, кстати, лучше в чате телеграфа спрашивать
источник

NK

Nikita Kolmogorov in Да, мы за DSBM
Nikita Kolmogorov
когда нет возможности сделать суперкласс, например
если такая возможность есть — можно просто суперкласс вернуть
источник

NK

Nikita Kolmogorov in Да, мы за DSBM
но вот например юзаешь либу
источник

NK

Nikita Kolmogorov in Да, мы за DSBM
а там все типы мессаг телеграма отдельные
источник

NK

Nikita Kolmogorov in Да, мы за DSBM
и без суперкласса общего
источник

NK

Nikita Kolmogorov in Да, мы за DSBM
и делаешь
источник

NK

Nikita Kolmogorov in Да, мы за DSBM
function getLatestMessage(): TextMessage | ImageMessage | VideoMessage
источник

P

Purple in Да, мы за DSBM
Nikita Kolmogorov
когда нет возможности сделать суперкласс, например
А если рассуждать в рамках функционального программирования?
источник

P

Purple in Да, мы за DSBM
Nikita Kolmogorov
function getLatestMessage(): TextMessage | ImageMessage | VideoMessage
А, понял
источник