Fix crash when trying to import a non-exported type (#36619)

* Fix crash when trying to import a non-exported type

* Add related info on each declaration
This commit is contained in:
Andrew Branch 2020-02-05 08:27:49 -08:00 committed by GitHub
parent 09441107c1
commit 20471182fc
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
11 changed files with 122 additions and 2 deletions

View File

@ -2530,8 +2530,8 @@ namespace ts {
: error(name, Diagnostics.Module_0_declares_1_locally_but_it_is_not_exported, moduleName, declarationName);
addRelatedInfo(diagnostic,
createDiagnosticForNode(localSymbol.valueDeclaration, Diagnostics._0_is_declared_here, declarationName)
);
...map(localSymbol.declarations, (decl, index) =>
createDiagnosticForNode(decl, index === 0 ? Diagnostics._0_is_declared_here : Diagnostics.and_here, declarationName)));
}
else {
error(name, Diagnostics.Module_0_has_no_exported_member_1, moduleName, declarationName);

View File

@ -0,0 +1,13 @@
tests/cases/compiler/b.ts(1,10): error TS2459: Module '"./a"' declares 'Foo' locally, but it is not exported.
==== tests/cases/compiler/a.ts (0 errors) ====
export {}
interface Foo {}
==== tests/cases/compiler/b.ts (1 errors) ====
import { Foo } from './a';
~~~
!!! error TS2459: Module '"./a"' declares 'Foo' locally, but it is not exported.
!!! related TS2728 tests/cases/compiler/a.ts:2:11: 'Foo' is declared here.

View File

@ -0,0 +1,16 @@
//// [tests/cases/compiler/importNonExportedMember2.ts] ////
//// [a.ts]
export {}
interface Foo {}
//// [b.ts]
import { Foo } from './a';
//// [a.js]
"use strict";
exports.__esModule = true;
//// [b.js]
"use strict";
exports.__esModule = true;

View File

@ -0,0 +1,9 @@
=== tests/cases/compiler/a.ts ===
export {}
interface Foo {}
>Foo : Symbol(Foo, Decl(a.ts, 0, 9))
=== tests/cases/compiler/b.ts ===
import { Foo } from './a';
>Foo : Symbol(Foo, Decl(b.ts, 0, 8))

View File

@ -0,0 +1,8 @@
=== tests/cases/compiler/a.ts ===
export {}
No type information for this code.interface Foo {}
No type information for this code.
No type information for this code.=== tests/cases/compiler/b.ts ===
import { Foo } from './a';
>Foo : any

View File

@ -0,0 +1,17 @@
tests/cases/compiler/b.ts(1,10): error TS2459: Module '"./a"' declares 'Foo' locally, but it is not exported.
==== tests/cases/compiler/a.ts (0 errors) ====
export {}
interface Foo {}
interface Foo {}
namespace Foo {}
==== tests/cases/compiler/b.ts (1 errors) ====
import { Foo } from './a';
~~~
!!! error TS2459: Module '"./a"' declares 'Foo' locally, but it is not exported.
!!! related TS2728 tests/cases/compiler/a.ts:2:11: 'Foo' is declared here.
!!! related TS6204 tests/cases/compiler/a.ts:3:11: and here.
!!! related TS6204 tests/cases/compiler/a.ts:4:11: and here.

View File

@ -0,0 +1,18 @@
//// [tests/cases/compiler/importNonExportedMember3.ts] ////
//// [a.ts]
export {}
interface Foo {}
interface Foo {}
namespace Foo {}
//// [b.ts]
import { Foo } from './a';
//// [a.js]
"use strict";
exports.__esModule = true;
//// [b.js]
"use strict";
exports.__esModule = true;

View File

@ -0,0 +1,15 @@
=== tests/cases/compiler/a.ts ===
export {}
interface Foo {}
>Foo : Symbol(Foo, Decl(a.ts, 0, 9), Decl(a.ts, 1, 16), Decl(a.ts, 2, 16))
interface Foo {}
>Foo : Symbol(Foo, Decl(a.ts, 0, 9), Decl(a.ts, 1, 16), Decl(a.ts, 2, 16))
namespace Foo {}
>Foo : Symbol(Foo, Decl(a.ts, 0, 9), Decl(a.ts, 1, 16), Decl(a.ts, 2, 16))
=== tests/cases/compiler/b.ts ===
import { Foo } from './a';
>Foo : Symbol(Foo, Decl(b.ts, 0, 8))

View File

@ -0,0 +1,10 @@
=== tests/cases/compiler/a.ts ===
export {}
No type information for this code.interface Foo {}
No type information for this code.interface Foo {}
No type information for this code.namespace Foo {}
No type information for this code.
No type information for this code.=== tests/cases/compiler/b.ts ===
import { Foo } from './a';
>Foo : any

View File

@ -0,0 +1,6 @@
// @Filename: a.ts
export {}
interface Foo {}
// @Filename: b.ts
import { Foo } from './a';

View File

@ -0,0 +1,8 @@
// @Filename: a.ts
export {}
interface Foo {}
interface Foo {}
namespace Foo {}
// @Filename: b.ts
import { Foo } from './a';