0

现在,当我尝试在 TypeScript 中为其创建类型时,我对 Node.js 包(Telegraf,一个机器人框架)有一点问题。包本身具有以下导出:

module.exports = Object.assign(Telegraf, {
    Composer,
    Extra,
    Markup,
    Router,
    Telegram,
    session
})

TS 导入:

import * as Telegraf from 'telegraf';

但是,当尝试访问它时,我将以下对象作为Telegraf

{ Composer: [Function: Composer],
  Extra: { [Function: Extra] Markup: [Function: Markup] },
  Markup: [Function: Markup],
  Router: [Function: Router],
  Telegram: [Function: Telegram],
  session: [Function],
  default:
  { [Function: Telegraf]
     Composer: [Function: Composer],
     Extra: { [Function: Extra] Markup: [Function: Markup] },
     Markup: [Function: Markup],
     Router: [Function: Router],
     Telegram: [Function: Telegram],
     session: [Function] } }

我的疑问是:如何访问Telegraf.default中的[Function: Telegraf ]

笔记

你可能会问“他为什么要访问这个特定的财产?” . 这是因为我必须在 TS 中模拟以下 Node.js:

const Telegraf = require('telegraf');

const bot = new Telegraf(process.env.BOT_TOKEN);

更多关于 Telegraf 的信息:http: //telegraf.js.org/#/

4

1 回答 1

0

很奇怪,这[Function: Telegraf]显示没有键/名称,因为这是一个无效的对象。

但是,假设default对象是有效的并且只有该函数加上这些键['Extra', 'Markup', 'Router', 'Telegram', 'session'],另一种方法是过滤这些键并执行与过滤后的键相关的函数:

let key = Object.keys(Telegraf.default)
                .filter(k => !['Extra', 'Markup', 'Router', 'Telegram', 'session'].includes(k));

Telegraf.default[key.pop()]() // <-- Execute the function!
于 2018-03-18T13:58:57.990 回答