如何在不执行任何其他转换(包括诸如#foo
之类的私有类字段)并且在我的原始代码中保留换行符的情况下,从TS 3.9模块中剥离所有TS类型和类型注释?
我正在为一个使用带有阶段3提案的纯JS的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保留了我所有的代码,但保留了doesn't preserve newlines。如果在代码块之间没有行间距,那么生成的代码将更难以阅读,也不适合在上游进行检查。
TSC也弄糟了缩进,但是更漂亮的可以解决。我只需要保留换行符。我对尝试以自动方式添加换行符的TSC后格式化程序不感兴趣。我只想将原始换行符保留在原始代码中。
这里是一个Babel 7.10的配置,也已经可以使用了:
{
"retainLines": true,
"plugins": ["@babel/plugin-proposal-class-properties"],
"presets": [
[
"@babel/preset-typescript",
{
"allowNamespaces": false,
"onlyRemoveTypeImports": true
}
]
]
}
该配置使我的换行符单独存在(很好!),但是它也转换了Stage 3 private class fields的用法,这很不好,因为我想在JS输出中保留本机#foo
属性的语法。我只希望保留我的运行时代码,但删除TS部分。
如何?
@babel/plugin-proposal-class-properties
更改为@babel/plugin-syntax-class-properties