Node.js中的相同命名空间中的每个文件的TypeScript类
什么是一个类每个文件多个类(因此多个文件)贡献给同一个命名空间的模式? 我在Node.js上下文中具体询问。
我知道如何在同一个命名空间中为每个文件定义一个类:
富/ A.ts:
module foo { export class A { } }
富/ B.ts:
module foo { export class B { } }
main.ts:
/// <reference path="./foo/A.ts"/> /// <reference path="./foo/B.ts"/> // TODO: How do I import the foo namespace at runtime?
TypeScript被认为是应用程序级JavaScript开发的一种语言,但我们似乎在应用程序级开发的最基本的方面被冷落,那就是如何布局和构造代码文件以及如何在运行时将所有东西链接在一起。
在nodejs
每个文件都是一个模块 。 在使用module
编写nodejs的代码时(不需要打字稿调用内部模块)。
foo是文件A
实际上是A.foo
,而文件B
的foo实际上是B.foo
。 这是nodejs工作的方式。 Typescript遵循nodejs中的常规规则。
有关外部与内部模块的更多信息: http : //www.youtube.com/watch?v = KDrWLMUY0R0 &hd = 1
PS关于:
应用程序开发的最基本的方面
这是浏览器的基础,而不是nodejs。 在浏览器中,nodejs中没有全局作用域 。
正如Basarat提到的,在Node.js中,文件是模块。 编写您正在处理的代码的正确方法是:
富/ A.ts:
class A { } export = A;
富/ B.ts:
class B { } export = B;
main.ts:
import A = require('./foo/A'); import B = require('./foo/B');
这在“TypeScript权威指南”的“导入和导出”部分有详细介绍。
如果使用--out
选项将所有TypeScript文件编译为单个JavaScript文件,这将会工作。 不需要进一步的代码。 没有这个选项,main.js(来自main.ts)将不会看到模块foo
并且会引发ReferenceError
。
感谢Basarat链接到他推荐的--out
选项的video之一: http : //www.youtube.com/watch?v = --out
= 1
晚了一点,但是我写了一个grunt插件,让你在节点中使用file-per-class / AMD风格的编程,并为AMD(浏览器)和CommonJS(节点)编译代码,同时避免使用的客户端垫片像requireJS。
https://www.npmjs.org/package/grunt-contrib-serverify-ts
这个阶段有点粗糙,已经做好了准备,但是对于一个相当复杂的项目来说,这个工作正在为我工作。