fix(48445): show errors on type-only import/export specifiers in JavaScript files (#48449)

This commit is contained in:
Oleksandr T 2022-03-29 18:38:58 +03:00 committed by GitHub
parent d962091d94
commit bf7bfa1b3f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
9 changed files with 73 additions and 0 deletions

View File

@ -2273,6 +2273,13 @@ namespace ts {
return "skip";
}
break;
case SyntaxKind.ImportSpecifier:
case SyntaxKind.ExportSpecifier:
if ((node as ImportOrExportSpecifier).isTypeOnly) {
diagnostics.push(createDiagnosticForNode(node, Diagnostics._0_declarations_can_only_be_used_in_TypeScript_files, isImportSpecifier(node) ? "import...type" : "export...type"));
return "skip";
}
break;
case SyntaxKind.ImportEqualsDeclaration:
diagnostics.push(createDiagnosticForNode(node, Diagnostics.import_can_only_be_used_in_TypeScript_files));
return "skip";

View File

@ -0,0 +1,9 @@
tests/cases/conformance/externalModules/typeOnly/a.js(2,10): error TS8006: 'export...type' declarations can only be used in TypeScript files.
==== tests/cases/conformance/externalModules/typeOnly/a.js (1 errors) ====
const foo = 0;
export { type foo };
~~~~~~~~
!!! error TS8006: 'export...type' declarations can only be used in TypeScript files.

View File

@ -0,0 +1,7 @@
=== tests/cases/conformance/externalModules/typeOnly/a.js ===
const foo = 0;
>foo : Symbol(foo, Decl(a.js, 0, 5))
export { type foo };
>foo : Symbol(foo, Decl(a.js, 1, 8))

View File

@ -0,0 +1,8 @@
=== tests/cases/conformance/externalModules/typeOnly/a.js ===
const foo = 0;
>foo : 0
>0 : 0
export { type foo };
>foo : 0

View File

@ -0,0 +1,11 @@
tests/cases/conformance/externalModules/typeOnly/a.js(1,10): error TS8006: 'import...type' declarations can only be used in TypeScript files.
==== tests/cases/conformance/externalModules/typeOnly/a.ts (0 errors) ====
export interface A {}
==== tests/cases/conformance/externalModules/typeOnly/a.js (1 errors) ====
import { type A } from "./a";
~~~~~~
!!! error TS8006: 'import...type' declarations can only be used in TypeScript files.

View File

@ -0,0 +1,8 @@
=== tests/cases/conformance/externalModules/typeOnly/a.ts ===
export interface A {}
>A : Symbol(A, Decl(a.ts, 0, 0))
=== tests/cases/conformance/externalModules/typeOnly/a.js ===
import { type A } from "./a";
>A : Symbol(A, Decl(a.js, 0, 8))

View File

@ -0,0 +1,7 @@
=== tests/cases/conformance/externalModules/typeOnly/a.ts ===
export interface A {}
No type information for this code.
No type information for this code.=== tests/cases/conformance/externalModules/typeOnly/a.js ===
import { type A } from "./a";
>A : any

View File

@ -0,0 +1,7 @@
// @allowJs: true
// @checkJs: true
// @noEmit: true
// @Filename: ./a.js
const foo = 0;
export { type foo };

View File

@ -0,0 +1,9 @@
// @allowJs: true
// @checkJs: true
// @noEmit: true
// @Filename: ./a.ts
export interface A {}
// @Filename: ./a.js
import { type A } from "./a";