2
如果我有兩個不同名稱空間中的兩個類型的文件。生成的訂單很重要。Typescript模塊作爲命名空間
export module Shapes {
export module Weird{
export class weirdshape extends Normal.normalshape{
public x = 3;
}
}
export module Normal{
export class normalshape {
public y = 4;
}
}
}
這將產生
var __extends = this.__extends || function (d, b) {
for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
function __() { this.constructor = d; }
__.prototype = b.prototype;
d.prototype = new __();
};
define(["require", "exports"], function(require, exports) {
(function (Shapes) {
(function (Weird) {
var weirdshape = (function (_super) {
__extends(weirdshape, _super);
function weirdshape() {
_super.apply(this, arguments);
this.x = 3;
}
return weirdshape;
})(Normal.normalshape);
Weird.weirdshape = weirdshape;
})(Shapes.Weird || (Shapes.Weird = {}));
var Weird = Shapes.Weird;
(function (Normal) {
var normalshape = (function() {
function normalshape() {
this.y = 4;
}
return normalshape;
})();
Normal.normalshape = normalshape;
})(Shapes.Normal || (Shapes.Normal = {}));
var Normal = Shapes.Normal;
})(exports.Shapes || (exports.Shapes = {}));
var Shapes = exports.Shapes;
});
在此爲了這將失敗。因爲Shapes.Normal.normalshape尚未定義。
是否有一個正確的方法來做到這一點在打字稿模塊可以用作適當的名稱空間?
相信打字稿試圖儘可能靠近JavaScript作爲可能的,這意味着這是應該在正常的JavaScript崩潰的代碼(即上面的代碼)將繼續在TypeScript中崩潰,而不是讓TypeScript引入一些非JavaScript類行爲。這確實是增加強大的打字和其他ES6功能,但不做任何流量控制分析。 –
對於您的情況,將兩個類分離爲單獨的模塊並使用模塊加載器會好得多。模塊裝載機正是爲了解決您的問題而發明的。 –