我正在编写一个只需要导出一个类的外部模块(使用 AMD)。我想简单地将其导入为import MyClass = require('./MyClass')
,因此在 MyClass 模块中我使用“export =”语法:
export = class MyClass {
// ...
}
这编译没有错误并产生合理的 JS 代码:
define(["require", "exports"], function (require, exports) {
return (function () {
function MyClass() { /* ... */ }
return MyClass;
})();
});
接下来,我尝试导入它:
import MyClass = require('./MyClass');
var my: MyClass = new MyClass();
编译它在“var my: MyClass”处出现错误:“TS2304:找不到名称'MyClass'”。
但是,当我将模块导出更改为:
class MyClass {
// ...
}
export = MyClass;
一切正常,但是生成的 JS 代码似乎几乎相同:
define(["require", "exports"], function (require, exports) {
var MyClass = (function () {
function MyClass() { /* ... */ }
return MyClass;
})();
return MyClass;
});
据我所知,唯一的区别是,它在返回之前使用了临时变量,这在这个闭包之外没有任何影响。
那么有什么区别以及为什么在第一种情况下出现 TS2304 错误?两种情况不应该一样吗?