如何访问JS对象中的无名函数?

时间:2018-03-18 13:49:26

标签: javascript node.js typescript typing telegraf

现在我尝试在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 中的 [功能:Telegraf]

注意

你可能会问"他为什么要访问这个特殊属性?" 。这是因为我在TS中模拟了以下Node.js:

const Telegraf = require('telegraf');

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

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

1 个答案:

答案 0 :(得分: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!