使用typescript在nodejs中导入模块的最佳做法是什么?我来自c#background,所以我想做这样的事情
MyClass.ts
module MyNamespace {
export class MyClass {
}
}
app.ts
// something like using MyNamespace
new MyNamespace.MyClass();
要么
MyClass.ts
export class MyClass {
}
app.ts
import MyClass = module("MyClass")
new MyClass();
我知道我可以做到这一点并且它会起作用,但是我必须为每个 class 想出两个名字
import MyClass2 = module("MyClass")
new MyClass2.MyClass();
Point将类分隔为多个.ts文件(最好是每个类一个文件) . 所以问题是,这是怎么做到的?
3 回答
你有两个选择:
如果您坚持使用CommonJS或AMD模块,则必须按照您在问题中描述的方式使用 external 模块 . 是否使用模块声明自己的命名空间主要是品味问题 . 避免指定两个名称的问题的唯一方法是创建一个别名类型的变量:
mymodule.ts
app.ts
您的另一个选择是使用 internal 模块,这些模块主要用于在内部构建代码 . 内部模块在编译时使用引用路径进入范围 .
mymodule.ts
app.ts
我认为你必须自己决定哪两种方法更合适 .
您可以使用为此特定目的创建的typescript-require模块将TypeScript模块导入node.js文件 .
我建议不要使用显式
module
(或namespace
)关键字,它需要它们,因为任何带有顶级import
或export
的打字稿文件都是自动模块 . 你的第二个 myModule.ts 例子很好 .但是当你将它导入另一个打字稿模块时,你会想要使用这样的东西:
就个人而言,我不喜欢第1行的重复性,但这是语言所要求的,所以我学会了接受它 . 我认为除非你放弃每类文件模式,否则这种语法的效用并不明显 . 您可以从模块中选择要导入的名称,以免发生意外的命名空间污染 .
另一种导入语法从模块中提取所有名称,但是在使用它们时必须使用模块限定名称 . 因此它也具有名称抗冲击性 .
关于不需要
module
/namespace
关键字的一般规则有例外,但不要从关注它们开始 . 想想文件==模块 .