typescript中的module.exports
有人知道如何进行模块导出吗 我尝试了一些不同的方法,最终以typescript中的module.exports,typescript,import,commonjs,Typescript,Import,Commonjs,有人知道如何进行模块导出吗 我尝试了一些不同的方法,最终以 导出类迎宾器{} 将编译为 exports.Greeter=Greeter; 但我真正想要的是: exports = Greeter; 所以我可以这样使用它: class Person { private firstName: string; private lastName: string; constructor(firstName: string, lastName: string) { this.f
导出类迎宾器{}
将编译为
exports.Greeter=Greeter;
但我真正想要的是:
exports = Greeter;
所以我可以这样使用它:
class Person {
private firstName: string;
private lastName: string;
constructor(firstName: string, lastName: string) {
this.firstName = firstName;
this.lastName = lastName;
}
public getFullName() {
return `${this.firstName} ${this.lastName}`;
}
}
export = Person;
从“Greeter”导入{Greeter};
常数迎宾员=新迎宾员();
而不是
从“Greeter”导入{Greeter};
const greeter=新的greeter.greeter();
Typescript可以这样做吗?它既难看又粗糙,但您仍然可以这样做:
类问候者{}
申报var出口:任何;
出口=迎宾;
其中包括:
var-Greeter=(函数(){
函数Greeter(){}
回程迎宾员;
})();
出口=迎宾;
所以我想我找到了一个解决办法。只需在.ts文件中将关键字“module”用括号括起来:
declare var module: any;
(module).exports = MyClass;
生成的javascript文件将完全相同:
(module).exports = MyClass;
注意,与自己声明var模块相比,下载并将其粘贴到与typescript文件相同的目录中更好。以下是express node.js路由文件的完整示例,该文件假定node.d.ts位于同一目录中:
/// <reference path="node.d.ts" />
var SheetController = function () {
this.view = function (req, res) {
res.render('view-sheet');
};
};
(module).exports = SheetController;
我想任何关键字都可以使用此模式进行转义:
declare var reservedkeyword: any;
(reservedkeyword).anything = something;
这一点现在已经实现,并在TypeScript 0.9:)中准备就绪。您可以在TypeScript中导出一个类,如下所示:
class Person {
private firstName: string;
private lastName: string;
constructor(firstName: string, lastName: string) {
this.firstName = firstName;
this.lastName = lastName;
}
public getFullName() {
return `${this.firstName} ${this.lastName}`;
}
}
export = Person;
下面是如何使用它:
var Person = require('./dist/commonjs/Person.js');
var homer = new Person('Homer', 'Simpson');
var name = homer.getFullName();
console.log(name); // Homer Simpson
下面是我的tsconfig.json(我使用的是TypeScript v2.0.3):
不幸的是,TypeScript编译器似乎不能很好地处理这个问题。例如,当您执行此操作时,无法从类派生。这将如何工作?这不是CommonJs与AMD之间的全部争论吗。这一常见做法不支持直接将内容返回为exports变量?为了澄清(因为我不得不深入研究),这里提供了0.9中的语法:(在“Export=”下)。为了进一步澄清,对于未来的读者,它几乎完全按照询问者的要求实现了。但我真正想要的是
export=Greeter代码>,这正是您要做的:)我只想从config/db.ts
中公开一个配置对象,并在应用程序中使用该配置。这就是我在TypeScript 1.4中可以成功完成的:在config/db.ts
writevar config={connStr:'postgres://user:pass@host/dbname'};导出=配置在app.ts
中,将其称为import dbConfig=require('./config/db');dbConnect(dbConfig.connStr)代码>非常感谢!我想知道为什么typescript没有实现ExportPerson。。。布拉布拉布拉布拉布拉?我认为这是合乎逻辑的,不是吗?或者我遗漏了什么?是否还可以从文件中导出一些打字?为了编写测试,您可能需要从文件中获取键入,但最后仍然需要一个模块.exports
。
{
"compilerOptions": {
"module": "commonjs",
"moduleResolution": "node",
"outDir": "dist/commonjs",
"rootDir": "src/ts",
"target": "es5"
},
"exclude": [
"dist",
"node_modules"
]
}