diff --git a/src/compiler/utilities.ts b/src/compiler/utilities.ts index 60db22498601f..512fcc05832f4 100644 --- a/src/compiler/utilities.ts +++ b/src/compiler/utilities.ts @@ -10467,6 +10467,7 @@ export function isValidBigIntString(s: string, roundTripOnly: boolean): boolean /** @internal */ export function isValidTypeOnlyAliasUseSite(useSite: Node): boolean { return !!(useSite.flags & NodeFlags.Ambient) + || isInJSDoc(useSite) || isPartOfTypeQuery(useSite) || isIdentifierInNonEmittingHeritageClause(useSite) || isPartOfPossiblyValidTypeOrAbstractComputedPropertyName(useSite) diff --git a/tests/baselines/reference/importTag23.errors.txt b/tests/baselines/reference/importTag23.errors.txt new file mode 100644 index 0000000000000..03bedf5694d7e --- /dev/null +++ b/tests/baselines/reference/importTag23.errors.txt @@ -0,0 +1,21 @@ +/b.js(6,14): error TS2420: Class 'C' incorrectly implements interface 'I'. + Property 'foo' is missing in type 'C' but required in type 'I'. + + +==== /a.ts (0 errors) ==== + export interface I { + foo(): void; + } + +==== /b.js (1 errors) ==== + /** + * @import * as NS from './a' + */ + + /** @implements {NS.I} */ + export class C {} + ~ +!!! error TS2420: Class 'C' incorrectly implements interface 'I'. +!!! error TS2420: Property 'foo' is missing in type 'C' but required in type 'I'. +!!! related TS2728 /a.ts:2:5: 'foo' is declared here. + \ No newline at end of file diff --git a/tests/baselines/reference/importTag23.symbols b/tests/baselines/reference/importTag23.symbols new file mode 100644 index 0000000000000..0ef50ac35705a --- /dev/null +++ b/tests/baselines/reference/importTag23.symbols @@ -0,0 +1,19 @@ +//// [tests/cases/conformance/jsdoc/importTag23.ts] //// + +=== /a.ts === +export interface I { +>I : Symbol(I, Decl(a.ts, 0, 0)) + + foo(): void; +>foo : Symbol(I.foo, Decl(a.ts, 0, 20)) +} + +=== /b.js === +/** + * @import * as NS from './a' + */ + +/** @implements {NS.I} */ +export class C {} +>C : Symbol(C, Decl(b.js, 0, 0)) + diff --git a/tests/baselines/reference/importTag23.types b/tests/baselines/reference/importTag23.types new file mode 100644 index 0000000000000..e2752f504851d --- /dev/null +++ b/tests/baselines/reference/importTag23.types @@ -0,0 +1,19 @@ +//// [tests/cases/conformance/jsdoc/importTag23.ts] //// + +=== /a.ts === +export interface I { + foo(): void; +>foo : () => void +> : ^^^^^^ +} + +=== /b.js === +/** + * @import * as NS from './a' + */ + +/** @implements {NS.I} */ +export class C {} +>C : C +> : ^ + diff --git a/tests/cases/conformance/jsdoc/importTag23.ts b/tests/cases/conformance/jsdoc/importTag23.ts new file mode 100644 index 0000000000000..ad2f361fe36c6 --- /dev/null +++ b/tests/cases/conformance/jsdoc/importTag23.ts @@ -0,0 +1,16 @@ +// @checkJs: true +// @allowJs: true +// @noEmit: true + +// @filename: /a.ts +export interface I { + foo(): void; +} + +// @filename: /b.js +/** + * @import * as NS from './a' + */ + +/** @implements {NS.I} */ +export class C {}