Skip to content

Commit

Permalink
sync to Ukrainian
Browse files Browse the repository at this point in the history
  • Loading branch information
niusia-ua committed Jun 17, 2024
1 parent 1492131 commit c03a2f8
Showing 1 changed file with 18 additions and 2 deletions.
20 changes: 18 additions & 2 deletions site/docs/uk/guide/filter-queries.md
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ bot.on("message:text", async (ctx) => {
});
```

Отже, grammY реалізує запити фільтрування як під час виконання, так і на рівні типів.
Отже, grammY реалізує запити фільтрування як [під час виконання](#продуктивність), так і [на рівні типів](#безпека-типів).

## Приклади запитів

Expand Down Expand Up @@ -347,8 +347,24 @@ bot.on(":text", handler);
Перевірка запитів фільтрування відбувається лише один раз, коли бот ініціалізується та викликається `bot.on()`.

Під час запуску grammY створює предикатну функцію із запиту фільтрування, розділяючи його на частини.
Кожна частина буде зіставлена з функцією, яка виконує одну перевірку `in` або дві перевірки, якщо частина запиту пропущена і потрібно перевірити два значення.
Кожна частина буде зіставлена з функцією, яка виконує одну перевірку одну перевірку істинності для властивості об'єкта або дві перевірки, якщо частина запиту пропущена і потрібно перевірити два значення.
Потім ці функції обʼєднуються у предикат, який перевіряє лише ті значення, що мають відношення до запиту, без перебору ключів обʼєкта `Update`.

Ця система використовує менше операцій, ніж деякі конкуруючі бібліотеки, яким потрібно виконувати перевірку вмісту у масивах для маршрутизації оновлень.
Система запитів фільтрування grammY працює швидше, попри те, що набагато потужніша.

### Безпека типів

Як згадувалося вище, запити фільтрування автоматично звужують певні властивості об'єкта контексту.
Предикат, отриманий з одного або декількох запитів фільтрування, є предикатом типу TypeScript, який виконує це звуження.
Загалом, ви можете довіряти тому, що виведення типів працює коректно.
Якщо властивість виводиться як присутня, ви можете безпечно покладатися на неї.
Якщо властивість виводиться як потенційно відсутня, то це означає, що існують певні випадки, коли вона відсутня.
Не варто виконувати приведення типів за допомогою оператора `!`.

> Для вас може бути неочевидним, що це за випадки.
> Не соромтеся запитувати в [груповому чаті](https://t.me/grammyjs), якщо не можете розібратися.
Обчислення цих типів є складним.
При розробці запитів фільтрування було використано багато знань про Bot API.
Якщо ви хочете дізнатися більше про основні підходи до обчислення цих типів, ви можете подивитися [виступ на YouTube](https://youtu.be/ZvT_xexjnMk).

0 comments on commit c03a2f8

Please sign in to comment.