Если у меня есть один файл с двумя типами в двух разных пространствах имен. Сгенерированный порядок имеет значение.Модуль ввода-вывода как пространство имен
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, но не делает никакого анализа управления потоком. –
Для вашей ситуации гораздо лучше разделить два класса на отдельные модули и использовать загрузчик модулей. Модульные погрузчики придуманы именно для решения вашей проблемы. –