This is how my tsconfig.json file looks:
{
"compileOnSave": true,
"compilerOptions": {
"module": "amd",
"noImplicitAny": false,
"removeComments": false,
"preserveConstEnums": true,
"strictNullChecks": true,
"sourceMap": false
}
}
I have a typescript file named a.ts which is an AMD module (I'm using requirejs), which looks like:
export function a() {
var a = {
b: 5
};
return a;
}
The compiled Javascript files looks like:
define(["require", "exports"], function (require, exports) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
function a() {
var a = {
b: 5
};
return a;
}
exports.a = a;
});
I need my generated JavaScript file to be:
define(function () {
"use strict";
var a = {
b: 5
};
return a;
});
So I need to
a) Remove the Object.defineProperty(exports, "__esModule", { value: true }); line
b) Remove the require and exports dependencies from define
c) Not having an internal function "a" and then expose "a" on exports, but rather simply return "a" object in the a.js file
What changes do I need to make to tsconfig.json and a.ts files to get the desired Javascript file or something closer to it, any improvements from current a.js towards what I need would be great, even 1 or 2 out of 3 requirements.
One way is to make a.ts exactly like my desired a.js file and then compile, but I must use export statement way of making amd module due to another unrelated requirement. Thanks for reading till here. Please help.
The export = syntax specifies a single object that is exported from the module. This can be a class, interface, namespace, function, or enum. When exporting a module using export = , TypeScript-specific import module = require("module") must be used to import the module.
Yes, you can use it in a same manner that you would use it in Javascript. Typescript is superset of Javascript, all things possible in Javascript are also possible in Typescript.
Use named exports to export multiple classes in TypeScript, e.g. export class A {} and export class B {} . The exported classes can be imported by using a named import as import {A, B} from './another-file' . You can have as many named exports as necessary in a file.
Your export issue can easily be fixed by using the export =
syntax. If you code your module with this:
var a = {
b: 5
};
export = a;
It is transpiled to this:
define(["require", "exports"], function (require, exports) {
"use strict";
var a = {
b: 5
};
return a;
});
Note that you also lose the creation of the __esModule
property.
The rest of your question duplicates another question. In brief, the TypeScript compiler provides no option to avoid emitting the require
and exports
dependencies. You have to process the emitted code on your own if you want to remove them.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With