如何@link 未导入的内容?

Dan*_*olf 25 typescript

TypeScript最近在 JSDoc 注释中引入了@link标签。文档在这里

但是,@link仅当 TypeScript 编译器知道链接目标时才会生成实际链接。换句话说,我链接到的任何内容都必须在同一文件中声明或导入。然而,情况并非总是如此。以这个(虚构的)例子为例:

轮子.ts

/** A wheel for use with a {@link Car}. */
export interface Wheel {
  // ...
}
Run Code Online (Sandbox Code Playgroud)

在此示例中, wheel.ts中的 JSDoc 注释引用了Car单独文件car.ts中定义的类型。因为Wheel.ts不导入car.ts,所以 TypeScript 不知道@link Car指向什么。因此,Car在 VS Code 中显示文档时无法显示正确的链接:

截屏

所以我的问题是:我如何告诉 TypeScript 在哪里可以找到 的定义Car

我尝试过以下方法:

1. 常规进口

添加到wheel.tsimport { Car } from './car';的顶部可以解决问题并创建一个实际链接(注意“Car”现在如何变成蓝色):Car

在此输入图像描述

但是,它会导致导入行上出现 TypeScript 错误“'Car'已声明,但从未读取其值。(6133)” 。TypeScript 似乎并不认为该@link标签是导入类型的实际用法。

我可以// @ts-ignore在导入上方添加告诉 TypeScript 忽略该错误。但这对我来说似乎很丑陋。

2. 类型导入

我可以使用类型 import: 来代替常规导入import type { Car } from './car';。结果是相同的:链接有效,但我收到 TypeScript 错误。

3. 内联导入

TypeScript 支持JSDoc 注释中的类型导入。所以我尝试了以下语法:

/** A wheel for use with a {@link import("./car").Car}. */
Run Code Online (Sandbox Code Playgroud)

然而,TypeScript 似乎不会评估链接内的导入:

在此输入图像描述

4.Typedef注释

我尝试按如下方式导入类型:

/** @typedef {import('./car').Car} Car */

/** A wheel for use with a {@link Car}. */
export interface Wheel {
  // ...
}
Run Code Online (Sandbox Code Playgroud)

但是,这也没有创建链接。

小智 1

这个问题如今有了答案。

引用TSDOC 文档

 * Suppose the `Button` class is part of an external package.  In that case, we
 * can include the package name when referring to it:
 *
 * {@link my-control-library#Button | the Button class}
 *
 * The package name can include an NPM scope and import path:
 *
 * {@link @microsoft/my-control-library/lib/Button#Button | the Button class}
Run Code Online (Sandbox Code Playgroud)