設定しとこうと思った話。文ごと完全に削除されるどれになるかは、以下の状態の組み合わせ依存する(他にも条件あるかも)。出力するケースでも同様である。複雑な条件を人間が制御し切ることは難しいため、予期せず依存ツリーが大きくなったり、副作用のあるモジュールの読み込み順が変わって挙動が変わってしまったりする。以外のツールを使うことも一般的になってきている。それらのツールは基本的に型アノテーションを文法的に削っているだけであり、型情報をうまく解釈できない。挙動を再現することは困難。実際、出力が異なるケースもある。文を明示的に宣言可能になっている。しては上記の複雑な挙動を落とすことができない状況が続いていた。そこで新オプションverbatimModuleSyntaxの登場である。一語一語をそのまま)トランスパイルする。修飾子はその識別子のみ削除される。修飾子がついてないとエラーになるため。文の識別子が値なのか?型なのか?など評価する必要なく、typeが付いてたら削除、付いてなかったら残す、というように逐語的なトランスパイルが可能になる。セマンティクスに介入しない、というのを重要なポリシーに掲げているので、本来、このような仕様の方が望ましいと思われる。verbatimModuleSyntaxを有効化すればいいんだね、以上、と思ったけど設定によってはそうでもなかった。文にしかトランスパイルできない。require()に変換できないという制約が付く。書くモジュールをimport/from構文で読み込むとエラーになるため、いにしえのimport/require構文を使う必要がある。相性が悪く、ちょっと実用する気にはなれない。してエコシステムに向けてあるべきトランスパイルの仕様を提示したことは意義があるが、ユーザーとしてはオプション有効化にハードルはあり、どうしたもんか。そのものズバリな@typescript-eslint/consistent-type-importsというルールがある。対してtypeが付いてないとエラーにできるのはverbatimModuleSyntaxと同様。エディタに組み込んでいれば人間が気にすることなく自動でtypeが付いたり消えたりしてくれる。