You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

TypeScript转JavaScript时如何保留@typedef类型定义?

保留TypeScript类型定义关联的JSDoc注释

我有如下TypeScript代码:

/**
 * @typedef Foo
 * @type {Object}
 * @property {string} id
 */
type Foo = {
    id: string
}
/**
 * bar
 * @returns {Foo}
 */
function bar(): Foo {
    const foo:Foo = {id: 'foo'}
    return foo
}

使用Rollup或tsc转译为JavaScript时,Foo对应的@typedef JSDoc块会被自动移除,导致编辑器中bar函数的@returns{Foo} JSDoc无法正常生效。我希望转译后的代码能保留该JSDoc块,得到如下结果:

/**
 * @typedef Foo
 * @type {Object}
 * @property {string} id
 */

/**
 * bar
 * @returns {Foo}
 */
function bar() {
    const foo = { id: 'foo' };
    return foo;
}

请问有没有办法保留这个JSDoc块?


解决方案

1. 修改TypeScript编译配置

在tsconfig.json中设置removeComments: false,让TypeScript编译器保留所有注释,包括类型定义关联的JSDoc:

{
  "compilerOptions": {
    "removeComments": false,
    // 其他编译配置项...
  }
}

注意:该配置会保留代码中所有注释(包括普通单行/多行注释),如果仅需保留特定JSDoc,需结合其他方法。

2. 使用Rollup专用插件

如果用Rollup构建,可借助rollup-plugin-preserve-jsdoc插件精准保留目标JSDoc注释。安装插件后,在Rollup配置中启用:

import preserveJsdoc from 'rollup-plugin-preserve-jsdoc';
import typescript from '@rollup/plugin-typescript';

export default {
  // 其他Rollup配置项...
  plugins: [
    typescript(),
    preserveJsdoc()
  ]
};

3. 调整代码注释写法

将@typedef的JSDoc与类型定义做更紧密的绑定,避免编译器将其判定为可移除的类型注释,比如合并注释内容:

/**
 * @typedef {Object} Foo
 * @property {string} id
 */
type Foo = {
    id: string
}

这种写法能让编译器更准确识别该JSDoc为类型的文档注释,配合removeComments: false配置时更易被保留。


内容的提问来源于stack exchange,提问作者Zach Young

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 06:25:24