typescript - 剥离 TypeScript 注释而不进行其他转译(包括第 3 阶段提案)并保留换行符
问题描述
如何从 TS 3.9 模块中去除所有 TS 类型和类型注释,而不执行任何其他转换(包括私有类字段,#foo
如
我正在为一个使用普通 JS 和第 3 阶段提案的 OSS 项目做出贡献,但我想在 TypeScript 中构建我的代码并使用自动构建步骤来去除所有 TS 注释并最终得到一个 .mjs 文件,我可以在上游检查。
我的代码不使用任何具有运行时足迹的 TS 功能(例如命名空间、枚举)。我只是使用 TS 进行类型检查。
到目前为止,我已经尝试过 TSC 和 Babel,但它们每个都有问题。
这是 TSC 版本:
tsc src/lib/LocalDateTime.ts --lib ESNext --target ESNext --module ESNext --isolatedModules --declaration --allowSyntheticDefaultImports --moduleResolution node --useDefineForClassFields true
mv code.js code.mjs
TSC 不理会我所有的代码,但它不保留换行符。如果代码块之间没有行间距,则生成的代码更难阅读,并且不适合在上游检查。
TSC 也弄乱了缩进,但 prettier 可以解决这个问题。我只需要保留换行符。我对尝试以自动方式添加换行符的后 TSC 格式化程序不感兴趣。我只想在原始代码中保留原始换行符。
这是一个也接近工作的 Babel 7.10 配置:
{
"retainLines": true,
"plugins": ["@babel/plugin-proposal-class-properties"],
"presets": [
[
"@babel/preset-typescript",
{
"allowNamespaces": false,
"onlyRemoveTypeImports": true
}
]
]
}
该配置只留下我的换行符(好!),但它也转换使用第 3 阶段私有类字段,这很糟糕,因为我想#foo
在 JS 输出中保留本机属性语法。我只希望我的运行时代码不受影响,但 TS 部分被剥离了。
如何?
解决方案
我有一种感觉,以这种方式开发会很快回来咬你,但是你可以配置 babel 来解析,但不能转换,大多数语法。通过使用一组并行插件,
在这种情况下,变化@babel/plugin-proposal-class-properties
变成@babel/plugin-syntax-class-properties
.babelrc.json
{
"retainLines": true,
"plugins": ["@babel/plugin-syntax-class-properties"],
"presets": [
[
"@babel/preset-env",
"@babel/preset-typescript",
{
"allowNamespaces": false,
"onlyRemoveTypeImports": true
}
]
]
}
这是repl中的一个示例。
推荐阅读
- gdb - 程序通过 gdb 运行时找不到 .so 文件
- ios - 当我将滚动方向从垂直更改为水平时,为什么集合视图会崩溃?
- python - 在熊猫的另一列末尾连接一列后得到列的平均值
- python - jpg图像无法响应
- qt - QQuickWidget 中的 Qt 虚拟键盘
- python - Python - 试图将字典插入 postgres 数据库,看到 keyerror
- c# - .NET Core 构建失败,在 MSBuild 文件夹中找不到 csc.dll 文件
- npm - “npm ci”抛出异常:无法读取未定义的属性“长度”
- microsoft-dynamics - Visual Studio 中的信息日志
- python - 多维直方图中 1 个元素的 bin 边缘