8

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

在 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 模块混合使用?上面的 require 用法有什么问题吗(它编译并运行正常......)?

4

2 回答 2

4

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

语法:

import x = module('SomeModule');

特别是ExternalModuleReferenceTypeScript 语言规范中的一个。

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

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

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

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

进口声明:

import Identifier = ModuleReference ;

模块参考:

ExternalModuleReference
ModuleName

外部模块参考:

module ( StringLiteral )
于 2013-01-23T16:21:40.880 回答
0

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

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

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

这是这个错误的官方线程:http: //typescript.codeplex.com/discussions/405800

于 2013-01-23T15:50:52.533 回答