Get resolved module exports in symbol chain and not raw exports (#20661)

* Actually get module exports and not module exports sans export stars

* style update

* Trim test a bit
This commit is contained in:
Wesley Wigham 2017-12-13 14:01:23 -08:00 committed by GitHub
parent 2c6501db52
commit e1278f091c
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 75 additions and 1 deletions

View file

@ -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);
}

View file

@ -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;

View file

@ -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))

View file

@ -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

View file

@ -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;