Skip to content

Commit

Permalink
Fix merging of JS value & TS type decl
Browse files Browse the repository at this point in the history
  • Loading branch information
elibarzilay committed Jun 4, 2020
1 parent 077a2a9 commit 4ee013d
Show file tree
Hide file tree
Showing 4 changed files with 53 additions and 1 deletion.
2 changes: 1 addition & 1 deletion src/compiler/checker.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7870,7 +7870,7 @@ namespace ts {
(resolvedSymbol || symbol).exports!.forEach((s, name) => {
const exportedMember = members.get(name)!;
if (exportedMember && exportedMember !== s) {
if (s.flags & SymbolFlags.Value) {
if (s.flags & SymbolFlags.Value && exportedMember.flags & SymbolFlags.Value) {
// If the member has an additional value-like declaration, union the types from the two declarations,
// but issue an error if they occurred in two different files. The purpose is to support a JS file with
// a pattern like:
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
=== /x.js ===
module.exports.x = 1;
>module.exports.x : Symbol(x, Decl(x.js, 0, 0), Decl(y.d.ts, 0, 0))
>module.exports : Symbol(x, Decl(x.js, 0, 0), Decl(y.d.ts, 0, 0))
>module : Symbol(module, Decl(x.js, 0, 0))
>exports : Symbol("/x", Decl(x.js, 0, 0))
>x : Symbol(x, Decl(x.js, 0, 0), Decl(y.d.ts, 0, 0))

module.exports = require("./y.js");
>module.exports : Symbol("/x", Decl(x.js, 0, 0))
>module : Symbol(export=, Decl(x.js, 0, 21))
>exports : Symbol(export=, Decl(x.js, 0, 21))
>require : Symbol(require)
>"./y.js" : Symbol("/y", Decl(y.d.ts, 0, 0))

=== /y.d.ts ===
export declare type x = 1;
>x : Symbol(x, Decl(x.js, 0, 0), Decl(y.d.ts, 0, 0))

Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
=== /x.js ===
module.exports.x = 1;
>module.exports.x = 1 : 1
>module.exports.x : number
>module.exports : typeof import("/y")
>module : { "\"/x\"": typeof import("/y"); }
>exports : typeof import("/y")
>x : number
>1 : 1

module.exports = require("./y.js");
>module.exports = require("./y.js") : typeof import("/y")
>module.exports : typeof import("/y")
>module : { "\"/x\"": typeof import("/y"); }
>exports : typeof import("/y")
>require("./y.js") : typeof import("/y")
>require : any
>"./y.js" : "./y.js"

=== /y.d.ts ===
export declare type x = 1;
>x : 1

Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
// @allowJs: true
// @checkJs: true
// @noEmit: true

// @Filename: /x.js
module.exports.x = 1;
module.exports = require("./y.js");

// @Filename: /y.d.ts
export declare type x = 1;

0 comments on commit 4ee013d

Please sign in to comment.