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

TypeScript编译后部分注释消失、部分保留的原因咨询

TypeScript编译后部分注释消失、部分保留的原因咨询

嘿,我来帮你拆解这个问题~首先先把你提供的TypeScript代码里的小语法错误修正一下,方便后续分析:

// Enum
enum Direction {
    North = 1,
    East,
    West,
    South
}

console.log(Direction.East);

// Literal types
function yesOrNoQuestion(ans: "yes" | "no"): void {
    console.log("You said", ans);
}

yesOrNoQuestion("yes");

// Tuple type
type rgb = [red: number, green: number, blue: number];
const color: rgb = [10, 255, 255];
console.log(color);

const tuple: [boolean, string] = [true, "yes"];
console.log(tuple);

接下来解释编译后注释消失/保留的核心原因,主要和TypeScript编译器的注释处理规则以及代码是否会被编译到最终JS有关:

  • 首先,TypeScript默认会移除普通注释(单行//、多行/* */),只保留JSDoc格式的注释(也就是/** ... */这种用于文档生成的注释)。比如你代码里的// Enum、// Literal types这些普通注释,编译后都会被清除。
  • 其次,类型相关的代码(比如枚举的类型定义、字面量类型、元组类型别名)在编译后会被完全擦除——因为JavaScript不认识这些TS专属的类型语法。所以哪怕你在这些类型代码上写了注释,也会跟着类型一起消失,不会出现在最终的JS文件里。
  • 那什么时候注释会保留呢?如果你写的是JSDoc注释,并且是附着在会被编译到JS的可执行代码上(比如函数、变量、对象),那编译后会保留。举个例子:
    /** 处理是/否问题的函数 */
    function yesOrNoQuestion(ans: "yes" | "no"): void {
        // 打印用户回答(这个普通注释会被移除)
        console.log("You said", ans);
    }
    
    编译后的JS会保留/** 处理是/否问题的函数 */这个注释,而函数内部的// 打印用户回答会被删掉。

另外,你也可以通过调整tsconfig.json里的removeComments选项来控制:如果设为false,那么所有普通注释也会被保留在编译后的JS里;如果设为true(默认值),就只保留JSDoc注释,移除其他普通注释。

备注:内容来源于stack exchange,提问作者Eswar Dudi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.13 16:49:49