为啥不能在 TypeScript 中导出类实例?

Posted

技术标签:

【中文标题】为啥不能在 TypeScript 中导出类实例?【英文标题】:Why is it not possible to export a class instance in TypeScript?为什么不能在 TypeScript 中导出类实例? 【发布时间】:2015-06-14 00:15:39 【问题描述】:

我没有找到在 TypeScript 中轻松导出类实例的方法。我必须想出以下解决方法来生成正确的 javascript 代码。

 var expo = new Logger("default");
 export = expo;

生成

var expo = new Logger("default");
module.exports = expo;

有没有更简单的方法来实现这一点?

【问题讨论】:

存在一些东西,你应该阅读[为什么Typescript使用关键字“export”来公开类和接口?][1] [1]:***.com/questions/15760462/… 你想写什么代码?看来您已经实现了目标? 我想写export new Logger("default");。嗯……还是不太清楚。无论如何,谢谢。 【参考方案1】:

我必须想出以下解决方法来生成正确的 javascript 代码

不是解决方法。这是 TS 中进行根级导出的标准方式。

有没有更简单的方法来实现这一点

是的。 export = new Variable。示例:

export = new Foo();

未来

对于 ES 模块,您应该改用 default 导出:

export default expo = new Logger("default");

在大多数情况下,这与根级导出具有相同的效果。

【讨论】:

添加了 Yes / No 答案。我没有在页面上的任何其他答案中看到它的答案。 感谢你在事后 3 年的改进(不是讽刺)!【参考方案2】:

打开https://k94n.com/es6-modules-single-instance-pattern 是另一种方法:

export let expo = new Logger("default");

它的优点是可以在 *.ts 文件中导出多个类实例。

【讨论】:

【参考方案3】:

一种方法是在类中创建一个静态实例:

export class MyClass 
  static instanceOfMyClass = new MyClass();
 

..

var instanceOfMyClass = MyClass.instanceOfMyClass;

【讨论】:

【参考方案4】:

很偶然,我找到了这种导出实例的方法:

class MyClass()

export default new MyClass();

【讨论】:

以上是关于为啥不能在 TypeScript 中导出类实例?的主要内容,如果未能解决你的问题,请参考以下文章

为啥在另一个 Typescript 项目中导入时没有得到导出的对象?

是否可以在也具有 IPC 挂钩的 node.js 文件中导出类?

从 index.ts 以外的文件中导出类

为啥typescript不能直接引用第三方js库的全局变量?

为啥我不能在 Django 项目中导入模块?

为啥我不能返回一个通用的 'T' 来满足 Partial<T>?