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的可执行代码上(比如函数、变量、对象),那编译后会保留。举个例子:
编译后的JS会保留/** 处理是/否问题的函数 */ function yesOrNoQuestion(ans: "yes" | "no"): void { // 打印用户回答(这个普通注释会被移除) console.log("You said", ans); }/** 处理是/否问题的函数 */这个注释,而函数内部的// 打印用户回答会被删掉。
另外,你也可以通过调整tsconfig.json里的removeComments选项来控制:如果设为false,那么所有普通注释也会被保留在编译后的JS里;如果设为true(默认值),就只保留JSDoc注释,移除其他普通注释。
备注:内容来源于stack exchange,提问作者Eswar Dudi
相关产品推荐
相关产品推荐

