TypeScript/tests/baselines/reference/jsDeclarationsExportDoubleAssignmentInClosure.types
Nathan Shively-Sanders aba932aefa
Create synthetic exports symbol for commonjs module (#42655)
* Commonjs module:create synthetic exports symbol

Previously, the `module` identifier in commonjs modules got a synthetic
type with a single property `exports`. The exports property reused the
file's symbol, which, for a module file, gives the correct exported
properties.

However, the name of this symbol was still the filename of the file, not
`exports`. This PR creates a synthetic symbol for `exports` by copying
in a similar way to esModuleInterop's `default` symbol in
`resolveESModuleSymbol` (although the intent there is to strip off
signatures from the symbol).

* correct parent of synthetic symbol
2021-02-05 10:56:03 -08:00

47 lines
1.5 KiB
Plaintext

=== tests/cases/conformance/jsdoc/declarations/index.js ===
// @ts-nocheck
function foo() {
>foo : () => void
module.exports = exports = function (o) {
>module.exports = exports = function (o) { return (o == null) ? create(base) : defineProperties(Object(o), descriptors); } : { (o: any): any; methods: () => void; }
>module.exports : { (o: any): any; methods: () => void; }
>module : { exports: { (o: any): any; methods: () => void; }; }
>exports : { (o: any): any; methods: () => void; }
>exports = function (o) { return (o == null) ? create(base) : defineProperties(Object(o), descriptors); } : (o: any) => any
>exports : any
>function (o) { return (o == null) ? create(base) : defineProperties(Object(o), descriptors); } : (o: any) => any
>o : any
return (o == null) ? create(base) : defineProperties(Object(o), descriptors);
>(o == null) ? create(base) : defineProperties(Object(o), descriptors) : any
>(o == null) : boolean
>o == null : boolean
>o : any
>null : null
>create(base) : error
>create : error
>base : error
>defineProperties(Object(o), descriptors) : error
>defineProperties : error
>Object(o) : any
>Object : ObjectConstructor
>o : any
>descriptors : error
};
const m = function () {
>m : () => void
>function () { // I have no idea what to put here } : () => void
// I have no idea what to put here
}
exports.methods = m;
>exports.methods = m : () => void
>exports.methods : any
>exports : any
>methods : any
>m : () => void
}