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)
| 归档时间: |
|
| 查看次数: |
2468 次 |
| 最近记录: |