VDS13 / telegram-inline-calendar

Date and time picker and Inline calendar for Node.js telegram bots
MIT License
88 stars 16 forks source link

Could not find a declaration file for module '../utilites/calendar/Calendar.js'. #14

Open almaziphone opened 7 months ago

almaziphone commented 7 months ago

Использую TS. который настроен на использование модулей ECMAScript. Как исправить?

VDS13 commented 7 months ago

Добрый день, @almaziphone, Как подключаете библиотеку? Какую версию используете? В какой момент отображается ошибка(запуске через npm/ VSCode просто подсвечивает)?

almaziphone commented 7 months ago

ESM Использую grammY локально скачал библиотеку Could not find a declaration file for module './calendar/Calendar.js'. 'e:/ProgJava/grammy_bot/src/bot/utilites/calendar/Calendar.js' implicitly has an 'any' type.ts(7016)

Если установить через npm: Could not find a declaration file for module 'telegram-inline-calendar'. 'e:/ProgJava/grammy_bot/node_modules/telegram-inline-calendar/index.js' implicitly has an 'any' type. Try npm i --save-dev @types/telegram-inline-calendar if it exists or add a new declaration (.d.ts) file containing declare module 'telegram-inline-calendar';ts(7016)

VDS13 commented 7 months ago

Ответы на остальные два вопроса?

almaziphone commented 7 months ago

Создал файл объявления типов. Клавиатуру запустил. Можете поправить? // Calendar.d.ts // Путь к файлу: #root/src/bot/utilites/calendar/src/calendar.d.ts import { Context, InlineKeyboardMarkup } from "grammy";

export class Calendar { chats: any; constructor(bot?: any, options?: CalendarOptions); NodeTelegramBotApi: BotApi; Telegraf: BotApi; Telebot: BotApi; Grammy: BotApi; DatetimeFunc: DatetimeFunc; DateFunc: DateFunc; addCustomStartMsg(): void; libraryInitialization(): void; dateFuncInitialization(): void; datetimeFuncInitialization(): void; weekDaysButtons(day: number): number; startWeekDay(day: number): number; twoDigits(num: number): string; colRowNavigation(date: Date, cd: number): number; howMuchDays(year: number, month: number): number; createTimeSelector(date?: string, from_calendar?: boolean): InlineKeyboardMarkup; createNavigationKeyboard(date: Date): InlineKeyboardMarkup; startNavCalendar(ctx: any): void; clickButtonCalendar(ctx: any): any; }

interface CalendarOptions { language?: string; date_format?: string; bot_api?: string; close_calendar?: boolean; start_week_day?: number; time_selector_mod?: boolean; time_range?: string; time_step?: string; start_date?: string | boolean; stop_date?: string | boolean; custom_start_msg?: string | boolean; lock_datetime?: boolean; lock_date?: boolean; }

interface BotApi { editMessageReplyMarkupCalendar(date: Date, queryOrCtx: any): void; editMessageReplyMarkupTime(date: Date, queryOrCtx: any, from_calendar: boolean): void; sendMessageCalendar(menu: any, msgOrCtx: any): void; sendMessageTime(menu: any, msgOrCtx: any): void; deleteMessage(queryOrCtx: any): void; replyMarkupObject(cnk: any): any; clickButtonCalendar(queryOrCtx: any): any; startNavCalendar(msgOrCtx: any): void; startTimeSelector(msgOrCtx: any): void; }

interface DatetimeFunc { withoutLockDatetime(stop: string, datetime: string, type: string): boolean; withLockDatetime(stop: string, datetime: string, type: string): boolean; }

interface DateFunc { withoutLockDate(date: Date, d: number): boolean; withLockDate(date: Date, d: number): boolean; }

VDS13 commented 7 months ago

Полноценную версию под TS я ещё не выпускал, пока нет времени. Если есть желание и время, вы можете сами создать форк и сделать полноценную поддержку TS(планирую им отдать версии серии 3.х.х.), став котрибьютером проекта.

Также скину вам ссылку на проект одного из пользователей, который переделал библиотеку под TS. - https://github.com/youjob13/tg-bot

RamallahS commented 6 months ago

Ну как костыль для этого репозитория, может кому пригодится

let Calendar: any
async function getCalendar() {
  if (!Calendar) {
    const calendar = await (eval('import("telegram-inline-calendar")') as Promise<typeof import('telegram-inline-calendar')>);
    Calendar = calendar.Calendar
  }
  return Calendar
}

    const lCalnedar = await getCalendar()
    calendar = new lCalnedar(false, {
      date_format: 'DD-MM-YYYY',
    });