typescript 如何让VS Code识别重写的JSDoc以便重新导出?

bvjxkvbb  于 2023-04-22  发布在  TypeScript
关注(0)|答案(2)|浏览(130)

在下面的示例中,VS Code 1.77.3和TypeScript 5.0.4似乎没有选择@deprecated标记,我不明白为什么?用例是将lodash template函数标记为已弃用。

    • t1.ts:**
import _template from 'lodash/template'; // eslint-disable-line @typescript-eslint/no-restricted-imports

export {
    /** @deprecated Deprecated. Use JavaScript template string instead. */
    _template as template
};

/** @deprecated Deprecated. */
export const func = (): void => {};
    • t2.ts:**
import * as _ from './t1';

_.template('');

_.func();

还请注意,当使用_.template函数时,VS Code正确地将template函数标记为已弃用,并在帮助弹出窗口中显示附加注解。

当函数完成时,它似乎忘记了它已被弃用,不再显示它已被划掉。

wqsoz72f

wqsoz72f1#

好的。现在你已经展示了如何使用该函数的信息,我想我明白是怎么回事了。(故事寓意:保存每个人的时间,总是从提供MRE开始)。
当您使用覆盖的文档重新导出时,覆盖的文档将仅在您 * 从重新导出导入 * 时显示-而不是从原始导出导入时。

// exporter.js
/** a thing */
export const thing = "hello world!";
// reexporter.js
export {
  /** @deprecated blah blah reasons. */
  thing
} from "./exporter";
// importer.js
import { thing } from "./reexporter"
// ^VS Code will cross "thing" out here
import { thing as originalThing } from "./exporter"
// ^VS Code will cross nothing out here

详细说明原因:
请参阅Override JSDoc for re-exported types / enum / classes / interfaces #42684,其中要求覆盖JSDocs以进行再导出的一般功能,后来在feat(42684): Override JSDoc for re-exported types / enum / classes / interfaces #47293中实现。该PR合并到TypeScript的主分支发生在2022年1月25日。虽然问题单和PR没有相关的里程碑,但这只是在TypeScript 4.6 Beta发布之前的一段时间。因此,如果TypeScript 4.6或4.7中有此功能,我不会感到惊讶。
在撰写本文时,VS Code捆绑的TypeScript(默认情况下用于IntelliSense)已经是TypeScript 5.0版本。
奇怪的是,我注意到这个功能的实现似乎并不允许完全覆盖文档。文档在重新导出的站点被覆盖,但在从重新导出导入的站点却没有被覆盖,除了添加了@deprecated标签,这对我来说似乎是一个bug。
为了您的参考/学习目的,此信息是通过谷歌搜索“github typescript issues mark reexport as deprecated”找到的。

lvmkulzt

lvmkulzt2#

请试试

import _template from 'lodash/template';

export {
/** @deprecated Deprecated. Use JavaScript template string instead. */
_template as template
};

相关问题