JSからの移行
自動JSからTSへの変換
- TypeStat (Codecademyで使用)
- TypeWiz
- js-to-ts-converter
- TS-migrate は Airbnbの変換で使用されています。
- dts-gen -
dts-gen
は、任意のJavaScriptオブジェクトからTypeScript定義ファイル(.d.ts)を生成するツールです。
JSON用 - http://json2ts.com/ はJSONからTypeScriptインターフェースを生成します。
手動によるJSからTSへの変換
「単純な名前変更」戦略
- OSX/Linux:
find src -name "*.js" -exec sh -c 'mv "$0" "${0%.js}.tsx"' {} \;
TypeScriptファイルはWebpackで読み込むか、tsc
コンパイラを使用してTSファイルをJSファイルと並行してコンパイルできます。基本的なtsconfig.json
は次のとおりです。
{
"compilerOptions": {
"allowJs": true
}
}
次に、JSファイルのチェックを有効にする必要があります。
{
"compilerOptions": {
"allowJs": true,
"checkJs": true
}
}
コードベースが大きく、一度に多くのエラーが発生する場合は、//@ts-nocheck
を使用して問題のあるファイルを無効にするか、checkJs
をオフにして、各通常のJSファイルの先頭に//@ts-check
ディレクティブを追加します。
TypeScriptはここでいくつかの重大なエラーを報告し、それらは簡単に修正できるはずです。
完了したら、暗黙的なany
をオフにすることで、より厳格なチェックを有効にします。
{
"compilerOptions": {
"allowJs": true,
"checkJs": true,
"noImplicitAny": true // or "strict": true
}
}
これにより、多くの型エラーが発生し、ファイルをTSに変換するか、(オプションで)JSにJSDocアノテーションを使用できるようになります。
ここでは、any
に対して環境型TODO型エイリアスを使用し、戻ってくる必要があるものを追跡する一般的な方法があります。
type TODO_TYPEME = any;
export function myFunc(foo: TODO_TYPEME, bar: TODO_TYPEME): number {
// ...
}
noImplicitThis
、strictNullChecks
など、より多くのstrict
モードフラグを徐々に追加して、最終的には厳格モードでJSファイルを残さずに実行できるようにします。
{
"compilerOptions": {
"strict": true
}
}
3ステッププロセス
https://speakerdeck.com/amhinson/convert-a-react-native-project-to-typescript-in-10-minutes?slide=23
その他のリソース
- 大規模なTypeScriptの採用 - Airbnbの変換事例と戦略 - それらのts-migrateツールはこちら
- BloombergからのTypeScriptスケーリングの教訓
create-react-app
/react-scripts
アプリのTypeScriptへの移行 -react-scripts-ts
を使用しないでください。- EJECTされたCRAアプリのTSへの移行
- LyftのJSからTSへの移行ツール(PropTypesの移行を含む)
- Hootsuite
- EtsyのTypeScriptへの移行
- Storybookの移行(PR)
- 20万行以上のプロジェクトをTypeScriptに移行し、その経験を語る - Coherent Labs -
grunt-ts
、jQuery、Kendo UIを使用 - 厳格なnullチェックの段階的な追加 https://vscode.dokyumento.jp/blogs/2019/05/23/strict-null
古いコンテンツ(古くなっている可能性があります)