Current problem
TypeScript supports UMD output but does not support exporting as a global namespace.
Syntax
NamespaceExportDeclaration:
export as namespace IdentifierPath
Behavior
export var x = 0;
export function y() {}
export default {};
export as namespace My.Custom.Namespace;
// emits:
(function (global, factory) {
if (typeof module === "object" && typeof module.exports === "object") {
var v = factory(require, exports);
if (v !== undefined) module.exports = v;
}
else if (typeof define === "function" && define.amd) {
define(["require", "exports"], factory);
}
else {
global.My = global.My || {};
global.My.Custom = global.My.Custom || {};
global.My.Custom.Namespace = global.My.Custom.Namespace || {};
var exports = global.My.Custom.Namespace;
factory(global.require, exports);
}
})(this, function (require, exports) {
"use strict";
exports.__esModule = true;
exports.x = 0;
function y() { }
exports.y = y;
exports["default"] = {};
});
Note
- This proposal basically follows Babel behavior.
- Importing any module without a module loader will throw in this proposal. A further extension may use global namespaces as Babel does.
- Babel overwrites on the existing namespace whereas this proposal extends the existing one, as TS
namespace does.
- Rollup has a special behavior where
export default X works like CommonJS module.exports = X whereas this proposal does not.
Prior arts: Babel exactGlobals, Webpack multi part library, Rollup output.name option with namespace support
See also
#8436
#10907
#20990
Current problem
TypeScript supports UMD output but does not support exporting as a global namespace.
Syntax
NamespaceExportDeclaration:
exportasnamespaceIdentifierPathBehavior
Note
namespacedoes.export default Xworks like CommonJSmodule.exports = Xwhereas this proposal does not.Prior arts: Babel exactGlobals, Webpack multi part library, Rollup
output.nameoption with namespace supportSee also
#8436
#10907
#20990