如何在不同的文件

时间:2018-03-10 18:13:54

标签: node.js typescript botframework

我正在尝试使我的机器人代码更易于管理,并将一些对话框放在不同的文件中。

There is an old, similar question here for javascript.

但我正在努力对Typescript做同样的事情。可能这更像是一个普通的打字稿问题,因为我是一个初学者,但仍然对不同的导入可能性感到有点困惑,但我没有找到任何可以应用于此的通用解决方案。

我试过的是:

//testdialog.ts

export default (bot) => {
bot.dialog("/Test", [
    (session, args, next) => {
        console.log("test".green);
        session.send(`Test Dialog triggered`);
    },
]).triggerAction({ matches: "test" });
}

然后在app.ts中导入它类似于:
import testdialog = require("./testdialog")(bot);

但似乎这与使用bot作为JS中的参数的未命名导入相比似乎完全错误require('./cars.js')(bot);

3 个答案:

答案 0 :(得分:2)

在我看来,您可以利用builder.Library()来达到您的要求。

//testdialog.ts
import * as builder from 'botbuilder';

export const createLibrary = () => {
    let lib = new builder.Library('test');
    lib.dialog('test', (session) => {
        session.send('this is test dialog');
    }).triggerAction({
        matches: /test/
    });
    return lib.clone();
}

//app.ts
import * as restify from 'restify';
import * as builder from 'botbuilder';
import * as testDialog from './testdialog';

let server = restify.createServer({});
server.listen(3978, function () {
    console.log('%s listening to %s', server.name, server.url);
})

let connector = new builder.ChatConnector({});

server.post('/api/messages', connector.listen());
let bot = new builder.UniversalBot(connector);

bot.dialog('/', (session) => {
    session.send('welcome');
})

bot.library(testDialog.createLibrary())

答案 1 :(得分:1)

如果你写

// a.js
export default expression;

然后你必须写

// b.js
import whatever from "./a";

console.log(whatever);

// b.js
import * as whatever from "./a";

console.log(whatever.default);

// b.js
import whatever = require("./a");

console.log(whatever.default);

但如果你写

// a.js
export = expression;

然后你必须写

// b.js
import whatever = require("./a");

console.log(whatever);

答案 2 :(得分:-1)

您的语法错误,请勿使用require,请执行以下导入: import * as testdialog from './testdialog';

然后运行您的机器人,如下所示:testdialog(bot);

相关问题