diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 27dbb5905e3..eea4d3f0a2d 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -1057,6 +1057,8 @@ namespace ts { else { symbolFromVariable = getPropertyOfVariable(targetSymbol, name.text); } + // if symbolFromVariable is export - get its final target + symbolFromVariable = resolveSymbol(symbolFromVariable); const symbolFromModule = getExportOfModule(targetSymbol, name.text); const symbol = symbolFromModule && symbolFromVariable ? combineValueAndTypeSymbols(symbolFromVariable, symbolFromModule) : diff --git a/tests/baselines/reference/exportEqualsOfModule.js b/tests/baselines/reference/exportEqualsOfModule.js new file mode 100644 index 00000000000..9c8196c7491 --- /dev/null +++ b/tests/baselines/reference/exportEqualsOfModule.js @@ -0,0 +1,23 @@ +//// [exportEqualsOfModule.ts] +declare module '~popsicle/dist/request' { + export class Request {} +} + +declare module '~popsicle/dist/common' { + import { Request } from '~popsicle/dist/request'; + export { Request }; +} + +declare module 'popsicle' { + import alias = require('~popsicle/dist/common'); + export = alias; +} + +declare module 'popsicle-proxy-agent' { + import { Request } from 'popsicle'; + function proxy(): (request: Request) => any; + export = proxy; +} + + +//// [exportEqualsOfModule.js] diff --git a/tests/baselines/reference/exportEqualsOfModule.symbols b/tests/baselines/reference/exportEqualsOfModule.symbols new file mode 100644 index 00000000000..20548930f03 --- /dev/null +++ b/tests/baselines/reference/exportEqualsOfModule.symbols @@ -0,0 +1,35 @@ +=== tests/cases/compiler/exportEqualsOfModule.ts === +declare module '~popsicle/dist/request' { + export class Request {} +>Request : Symbol(Request, Decl(exportEqualsOfModule.ts, 0, 41)) +} + +declare module '~popsicle/dist/common' { + import { Request } from '~popsicle/dist/request'; +>Request : Symbol(Request, Decl(exportEqualsOfModule.ts, 5, 12)) + + export { Request }; +>Request : Symbol(Request, Decl(exportEqualsOfModule.ts, 6, 12)) +} + +declare module 'popsicle' { + import alias = require('~popsicle/dist/common'); +>alias : Symbol(alias, Decl(exportEqualsOfModule.ts, 9, 27)) + + export = alias; +>alias : Symbol(alias, Decl(exportEqualsOfModule.ts, 9, 27)) +} + +declare module 'popsicle-proxy-agent' { + import { Request } from 'popsicle'; +>Request : Symbol(Request, Decl(exportEqualsOfModule.ts, 15, 12)) + + function proxy(): (request: Request) => any; +>proxy : Symbol(proxy, Decl(exportEqualsOfModule.ts, 15, 39)) +>request : Symbol(request, Decl(exportEqualsOfModule.ts, 16, 23)) +>Request : Symbol(Request, Decl(exportEqualsOfModule.ts, 15, 12)) + + export = proxy; +>proxy : Symbol(proxy, Decl(exportEqualsOfModule.ts, 15, 39)) +} + diff --git a/tests/baselines/reference/exportEqualsOfModule.types b/tests/baselines/reference/exportEqualsOfModule.types new file mode 100644 index 00000000000..d96557c93be --- /dev/null +++ b/tests/baselines/reference/exportEqualsOfModule.types @@ -0,0 +1,35 @@ +=== tests/cases/compiler/exportEqualsOfModule.ts === +declare module '~popsicle/dist/request' { + export class Request {} +>Request : Request +} + +declare module '~popsicle/dist/common' { + import { Request } from '~popsicle/dist/request'; +>Request : typeof Request + + export { Request }; +>Request : typeof Request +} + +declare module 'popsicle' { + import alias = require('~popsicle/dist/common'); +>alias : typeof alias + + export = alias; +>alias : typeof alias +} + +declare module 'popsicle-proxy-agent' { + import { Request } from 'popsicle'; +>Request : typeof Request + + function proxy(): (request: Request) => any; +>proxy : () => (request: Request) => any +>request : Request +>Request : Request + + export = proxy; +>proxy : () => (request: Request) => any +} + diff --git a/tests/cases/compiler/exportEqualsOfModule.ts b/tests/cases/compiler/exportEqualsOfModule.ts new file mode 100644 index 00000000000..b953c65a8ad --- /dev/null +++ b/tests/cases/compiler/exportEqualsOfModule.ts @@ -0,0 +1,19 @@ +declare module '~popsicle/dist/request' { + export class Request {} +} + +declare module '~popsicle/dist/common' { + import { Request } from '~popsicle/dist/request'; + export { Request }; +} + +declare module 'popsicle' { + import alias = require('~popsicle/dist/common'); + export = alias; +} + +declare module 'popsicle-proxy-agent' { + import { Request } from 'popsicle'; + function proxy(): (request: Request) => any; + export = proxy; +}