【问题标题】:Unable to export/import a TypeScript class: "TypeError: Messenger is not a constructor"无法导出/导入 TypeScript 类:“TypeError:Messenger 不是构造函数”
【发布时间】:2018-02-24 08:22:52
【问题描述】:

我在 Typescript 文件中实现了一个类,并且我能够在它实现的同一个文件中成功创建一个新对象,但是如果我尝试在单独的文件中导出/导入它们,我会遇到问题。请参阅下面的错误消息:

错误

nodemon] starting `ts-node src/TestBot.ts`
Initializing Messenger

/Users/some_user/Documents/Src/some_folder/src/TestBot.ts:14
let myBot =  new Messenger(my_page_access_token, my_page_verify_token);
                ^
TypeError: Messenger is not a constructor
    at Object.<anonymous (/Users/some_user/Documents/Src/some_folder/src/TestBot.ts:14:17)

我将不胜感激任何解决问题的指针。

这是实现 Messenger 类的主文件

// index.ts
class Messenger extends events.EventEmitter {
    private readonly pageAccessToken: String;
    private readonly pageVerifyToken: String;

    constructor(pageAccessToken: String, pageVerifyToken: String) {
        super();
        if (!pageAccessToken || !pageVerifyToken) {
            console.error("Missing Messenger Tokens");
            throw new TypeError("Missing Messenger Tokens");    
        }
        console.log("Initializing Messenger");
        this.pageAccessToken = pageAccessToken;
        this.pageVerifyToken = pageVerifyToken;
    }
...
...
}
...
export = Messenger;

在同一目录中的 TestBot.ts 文件中,我正在实例化它

// TestBot.ts
import Messenger = require('./index');

let http = require('http');

let my_page_access_token = 'access_token';
let my_page_verify_token = 'verify_token';

let myBot =  new Messenger(my_page_access_token, my_page_verify_token);

编辑1:

尝试了各种排列方式

我尝试过各种排列方式

// index.ts
// export = Messenger;
// module.exports = Messenger;
// export default Messenger;
// export * from './index';
// export {Messenger};
// export default Messenger;


// TestBot.ts
// import { Messenger } from './index';
// import Messenger from './index';
// import Messenger = require('./index');
// import './index.ts'

【问题讨论】:

  • 你在 TS 的节点中使用 ES6 导入吗?
  • 您使用哪个命令来编译 .TS 文件?有 --out 选项?
  • @Niladri --> ts-node src/TestBot.ts 和根据 tsconfig.json 的目标是“ES5” // nodemon.json { "verbose": false, "watch": [" src/*.ts"], "ext": "ts", "ignore": ["node_modules"], "exec": "ts-node src/TestBot.ts" }
  • 你可以试试import {Messenger} from './index'。有时这是由于 require 导致节点中的循环依赖,因为它返回 {}
  • 不,我问的是在你的 testbot.ts 文件中导入。您使用的是哪个版本的打字稿?

标签: javascript node.js typescript typescript2.0


【解决方案1】:

似乎带有类定义的文件名不能是“index.ts”。之后,将其更改为其他名称,我不再遇到问题。

如果我能找到确切的原因,我会更新更多细节。另外,很高兴听到其他人的解释。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-04-03
    • 1970-01-01
    • 1970-01-01
    • 2016-04-04
    • 2018-07-11
    • 2017-05-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多