TypeScript 0.8.2在内部模块中导入Node.js模块

时间:2013-01-23 12:25:38

标签: node.js module external typescript internal

好的,我可以看到你想在你的项目中使用内部模块。好吧,在TypeScript 0.8.1.1中有一个解决方法,您可以定义非导出模块(内部)并在其上面添加导入。在0.8.2中,似乎这不再起作用了。我在这里看到的唯一选择是完全省略导入语法并使用节点模块的标准要求。我不知道这是不是一个好主意但是请分享你的意见。我知道使用import语法会使模块外部(语言规范),但在0.8.1.1中不是这样,bug可能?

在TypeScript 0.8.1.1中,这种方法在0.8.2中起作用并且不再起作用了:

import path = module('path');
import fs = module('fs');
module SomeNamespace.Controller {
    export class Index {
        ...
    }
}

我可以在其他内部模块的文件顶部使用参考语法引用包含上述代码的文件,通常调用:

var ctrl = new SomeNamespace.Controller.Index;
ctrl.index();

似乎在0.8.2中,这是内部模块的唯一方式:

var path = require('path');
var fs = require('fs');
module SomeNamespace.Controller {
    export class Index {
        ...
    }
}

是否还有其他可能将内部模块与Node.js模块混合使用?以上需要使用是否有问题(它编译并运行正常......)?

2 个答案:

答案 0 :(得分:4)

我认为TypeScript 0.8.2让我们更接近规范。

语法:

import x = module('SomeModule');

特别是TypeScript语言规范中的ExternalModuleReference

将使用以下方式导入内部模块:

///<reference path="SomeModule.ts" />
import x = SomeModule;

但是导入内部模块不会在JavaScript中生成require语句。

取自TypeScript语言规范0.8 - 9.2.2导入声明

<强>导入声明:

import Identifier = ModuleReference ;

<强> ModuleReference:

ExternalModuleReference
ModuleName

<强> ExternalModuleReference:

module ( StringLiteral )

答案 1 :(得分:0)

好的,这个错误是由于TypeScript的版本造成的。 在TypeScript 0.8.1.1中导入外部模块的语法必须是:

export import <moduleName> = module(“<path>”);

这是最新版本的TypeScript中发现的错误,您可以返回到先前版本或更改语法以使其与v0.8.1.1兼容。请记住,这是一个错误,在将来的版本中,您应该能够使用原始语法。

这是此错误的官方主题: http://typescript.codeplex.com/discussions/405800