diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 18d32322297f0..ce74d1aa6a49c 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -6330,7 +6330,8 @@ namespace ts { return result; function visitExistingNodeTreeSymbols(node: T): Node { - if (isJSDocAllType(node)) { + // We don't _actually_ support jsdoc namepath types, emit `any` instead + if (isJSDocAllType(node) || node.kind === SyntaxKind.JSDocNamepathType) { return createKeywordTypeNode(SyntaxKind.AnyKeyword); } if (isJSDocUnknownType(node)) { diff --git a/tests/baselines/reference/jsDeclarationsModuleReferenceHasEmit.js b/tests/baselines/reference/jsDeclarationsModuleReferenceHasEmit.js new file mode 100644 index 0000000000000..0b38d46905fd1 --- /dev/null +++ b/tests/baselines/reference/jsDeclarationsModuleReferenceHasEmit.js @@ -0,0 +1,47 @@ +//// [index.js] +/** + * @module A + */ +class A {} + + +/** + * Target element + * @type {module:A} + */ +export let el = null; + +export default A; + +//// [index.js] +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.el = void 0; +/** + * @module A + */ +var A = /** @class */ (function () { + function A() { + } + return A; +}()); +/** + * Target element + * @type {module:A} + */ +exports.el = null; +exports.default = A; + + +//// [index.d.ts] +/** + * Target element + * @type {module:A} + */ +export let el: any; +export default A; +/** + * @module A + */ +declare class A { +} diff --git a/tests/baselines/reference/jsDeclarationsModuleReferenceHasEmit.symbols b/tests/baselines/reference/jsDeclarationsModuleReferenceHasEmit.symbols new file mode 100644 index 0000000000000..c40cd15a5162e --- /dev/null +++ b/tests/baselines/reference/jsDeclarationsModuleReferenceHasEmit.symbols @@ -0,0 +1,18 @@ +=== tests/cases/conformance/jsdoc/declarations/index.js === +/** + * @module A + */ +class A {} +>A : Symbol(A, Decl(index.js, 0, 0)) + + +/** + * Target element + * @type {module:A} + */ +export let el = null; +>el : Symbol(el, Decl(index.js, 10, 10)) + +export default A; +>A : Symbol(A, Decl(index.js, 0, 0)) + diff --git a/tests/baselines/reference/jsDeclarationsModuleReferenceHasEmit.types b/tests/baselines/reference/jsDeclarationsModuleReferenceHasEmit.types new file mode 100644 index 0000000000000..3b0c829829e79 --- /dev/null +++ b/tests/baselines/reference/jsDeclarationsModuleReferenceHasEmit.types @@ -0,0 +1,19 @@ +=== tests/cases/conformance/jsdoc/declarations/index.js === +/** + * @module A + */ +class A {} +>A : A + + +/** + * Target element + * @type {module:A} + */ +export let el = null; +>el : error +>null : null + +export default A; +>A : A + diff --git a/tests/cases/conformance/jsdoc/declarations/jsDeclarationsModuleReferenceHasEmit.ts b/tests/cases/conformance/jsdoc/declarations/jsDeclarationsModuleReferenceHasEmit.ts new file mode 100644 index 0000000000000..32a15122828a8 --- /dev/null +++ b/tests/cases/conformance/jsdoc/declarations/jsDeclarationsModuleReferenceHasEmit.ts @@ -0,0 +1,19 @@ +// @allowJs: true +// @checkJs: true +// @target: es5 +// @outDir: ./out +// @declaration: true +// @filename: index.js +/** + * @module A + */ +class A {} + + +/** + * Target element + * @type {module:A} + */ +export let el = null; + +export default A; \ No newline at end of file