Skip to content

Commit

Permalink
Get resolved module exports in symbol chain and not raw exports (#20661)
Browse files Browse the repository at this point in the history
* Actually get module exports and not module exports sans export stars

* style update

* Trim test a bit
  • Loading branch information
weswigham authored Dec 13, 2017
1 parent 2c6501d commit e1278f0
Show file tree
Hide file tree
Showing 5 changed files with 75 additions and 1 deletion.
3 changes: 2 additions & 1 deletion src/compiler/checker.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2216,7 +2216,8 @@ namespace ts {

// Look in the exported members, if we can find accessibleSymbolChain, symbol is accessible using this chain
// but only if the symbolFromSymbolTable can be qualified
const accessibleSymbolsFromExports = resolvedImportedSymbol.exports ? getAccessibleSymbolChainFromSymbolTable(resolvedImportedSymbol.exports) : undefined;
const candidateTable = getExportsOfSymbol(resolvedImportedSymbol);
const accessibleSymbolsFromExports = candidateTable && getAccessibleSymbolChainFromSymbolTable(candidateTable);
if (accessibleSymbolsFromExports && canQualifySymbol(symbolFromSymbolTable, getQualifiedLeftMeaning(meaning))) {
return [symbolFromSymbolTable].concat(accessibleSymbolsFromExports);
}
Expand Down
31 changes: 31 additions & 0 deletions tests/baselines/reference/declarationEmitAliasExportStar.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
//// [tests/cases/compiler/declarationEmitAliasExportStar.ts] ////

//// [thingB.ts]
export interface ThingB { }
//// [things.ts]
export * from "./thingB";
//// [index.ts]
import * as things from "./things";
export const thing2 = (param: things.ThingB) => null;


//// [thingB.js]
"use strict";
exports.__esModule = true;
//// [things.js]
"use strict";
exports.__esModule = true;
//// [index.js]
"use strict";
exports.__esModule = true;
exports.thing2 = function (param) { return null; };


//// [thingB.d.ts]
export interface ThingB {
}
//// [things.d.ts]
export * from "./thingB";
//// [index.d.ts]
import * as things from "./things";
export declare const thing2: (param: things.ThingB) => any;
16 changes: 16 additions & 0 deletions tests/baselines/reference/declarationEmitAliasExportStar.symbols
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
=== tests/cases/compiler/thingB.ts ===
export interface ThingB { }
>ThingB : Symbol(ThingB, Decl(thingB.ts, 0, 0))

=== tests/cases/compiler/things.ts ===
export * from "./thingB";
No type information for this code.=== tests/cases/compiler/index.ts ===
import * as things from "./things";
>things : Symbol(things, Decl(index.ts, 0, 6))

export const thing2 = (param: things.ThingB) => null;
>thing2 : Symbol(thing2, Decl(index.ts, 1, 12))
>param : Symbol(param, Decl(index.ts, 1, 23))
>things : Symbol(things, Decl(index.ts, 0, 6))
>ThingB : Symbol(things.ThingB, Decl(thingB.ts, 0, 0))

18 changes: 18 additions & 0 deletions tests/baselines/reference/declarationEmitAliasExportStar.types
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
=== tests/cases/compiler/thingB.ts ===
export interface ThingB { }
>ThingB : ThingB

=== tests/cases/compiler/things.ts ===
export * from "./thingB";
No type information for this code.=== tests/cases/compiler/index.ts ===
import * as things from "./things";
>things : typeof things

export const thing2 = (param: things.ThingB) => null;
>thing2 : (param: things.ThingB) => any
>(param: things.ThingB) => null : (param: things.ThingB) => any
>param : things.ThingB
>things : any
>ThingB : things.ThingB
>null : null

8 changes: 8 additions & 0 deletions tests/cases/compiler/declarationEmitAliasExportStar.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
// @declaration: true
// @filename: thingB.ts
export interface ThingB { }
// @filename: things.ts
export * from "./thingB";
// @filename: index.ts
import * as things from "./things";
export const thing2 = (param: things.ThingB) => null;

0 comments on commit e1278f0

Please sign in to comment.