コードが膨大な場合、この移行は骨が折れる作業です。 今日は、この移行をサポートするツールを TypeScript Compiler API で作った話をします。 import { A, C } from 'module' import type { B } from 'module' 手動以外、方法はない…?
これだけで、出力結果に type が付与された、 SRCコードを出力することが可能になります。 ts.createImportClause( undefined, ts.createNamedImports([ts.createImportSpecifier( undefined, ts.createIdentifier("B") )]), true // <- here ) import type { B } from 'module'
複数 import 文を列挙していることもあるでしょう。(同じモジュールなのに) 現状のサンプルコードでは、この様なバラバラのコードも マージする様にもなっています。 import type { TypeAlias } from './a' import { Interface } from './b' import { Const } from './a' import { TypeAlias as TYPEALIAS } from './a' import { Let, Interface as INTERFACE } from './b'
出力結果のソート制御は現状いれていませんが、 この辺りの設定も出来ると、コードの掃除にも使えそうです。 import { Const } from './a'; import { Let } from './b'; import type { TypeAlias, TypeAlias as TYPEALIAS } from './a'; import type { Interface, Interface as INTERFACE } from './b';
コードジェネレーター・型を利用したチェッカーなど、 Compiler API なら可能なアイディアはまだまだあります。 ぜひ遊んでみてください。 import { Const } from './a'; import { Let } from './b'; import type { TypeAlias, TypeAlias as TYPEALIAS } from './a'; import type { Interface, Interface as INTERFACE } from './b';