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

jzv*_*elc 8 module external internal node.js typescript

好的,正如我所见,您希望在项目中使用内部模块.好吧,在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 {
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)

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

var ctrl = new SomeNamespace.Controller.Index;
ctrl.index();
Run Code Online (Sandbox Code Playgroud)

似乎在0.8.2中这是它对内部模块起作用的唯一方式:

var path = require('path');
var fs = require('fs');
module SomeNamespace.Controller {
    export class Index {
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)

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

Fen*_*ton 4

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

语法:

import x = module('SomeModule');
Run Code Online (Sandbox Code Playgroud)

具体是ExternalModuleReferenceTypeScript 语言规范中的一个。

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

///<reference path="SomeModule.ts" />
import x = SomeModule;
Run Code Online (Sandbox Code Playgroud)

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

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

进口报关:

import Identifier = ModuleReference ;
Run Code Online (Sandbox Code Playgroud)

模块参考:

ExternalModuleReference
ModuleName
Run Code Online (Sandbox Code Playgroud)

外部模块参考:

module ( StringLiteral )
Run Code Online (Sandbox Code Playgroud)