Node.js中同一命名空间中每个文件的TypeScript类

时间:2014-01-27 05:05:26

标签: 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开发的一种语言,但我们似乎在应用程序级开发的最基本方面被忽略了,这是如何布局和结构代码文件以及在运行时如何将所有内容链接在一起。

4 个答案:

答案 0 :(得分:7)

nodejs中,每个文件模块。使用module编写nodejs的代码时(不需要使用哪些typescript调用内部模块)。

foo文件A实际上是A.foo,文件B中的foo实际上是B.foo。这是nodejs的工作方式。 Typescript遵循nodejs中的常规。

有关外部与iternal模块的更多信息:http://www.youtube.com/watch?v=KDrWLMUY0R0&hd=1

PS关于:

  

应用程序规模开发的最基本方面

在浏览器中是基础,而不是在nodejs中。 nodejs中没有全局范围与浏览器中的方式相同。

答案 1 :(得分:4)

正如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');

The Definitive Guide to TypeScript的“导入和导出”部分对此进行了详细介绍。

答案 2 :(得分:1)

如果使用--out选项将所有TypeScript文件编译为单个JavaScript文件,则此方法有效。无需其他代码。如果没有此选项,main.js(来自main.ts)将不会看到模块foo,并且会抛出ReferenceError

感谢Basarat链接到他的一个推荐--out选项的视频:http://www.youtube.com/watch?v=KDrWLMUY0R0&hd=1

答案 3 :(得分:1)

派对有点晚了,但是我编写了一个grunt插件,允许你在节点中使用每类/文件类型的编程,并为AMD(浏览器)和CommonJS(节点)编译代码避免使用像requireJS这样的客户端垫片。

https://www.npmjs.org/package/grunt-contrib-serverify-ts

在这个阶段,它有点粗糙和准备好,但它在一个相当复杂的项目上为我工作。