TypeScript移行チートシート
このチートシートは、大規模なコードベースをプレーンなJSまたはFlowからTypeScriptに移行する際の、実際の事例から得られたアドバイスとユーティリティをまとめたものです。TypeScriptへの移行を説得しようとするものではありませんが、企業が移行後の経験について提供するわずかな統計情報を収集しています。
⚠️ このチートシートは非常に新しく、皆様からのご協力が必要です。的確なアドバイス、結果、最新のコンテンツを歓迎いたします。
前提条件
JSからの移行に関するTypeScript公式ガイドをお読みください。また、React変換ガイドにも精通している必要があります。
一般的な変換アプローチ
- レベル0:TypeScriptを使用せず、JSDocを使用する
- JSDocセクションをご覧ください
- レベル1A:主にJavaScript、徐々に厳格なTypeScript
- 公式TSガイドで推奨されている通り
allowJS
を使用する(事例:clayallsop、pleo)
- レベル1B:最初からTypeScriptへの完全な名前変更
- ".jsファイルをすべて.tsに名前変更する"?
- 最も緩やかな、最低限の設定から始めます
- レベル2:厳格なTypeScript
成功した企業が採用したその他のヒント/アプローチ
- 型定義がないライブラリのコンパイラエラーには
@ts-expect-error
を使用します。 - TSLintではなくESLintを選択する(出典:ESLintおよびTSロードマップ)。このツールを使用してTSLintをESLintに変換できます。
- 新しいコードは常にTypeScriptで記述する必要があります。例外はありません。既存のコードについては:JavaScriptコードを変更する必要があるタスクの場合、コードを書き直す必要があります。(出典:Hootsuite)
Webpackのヒント
- Webpackローダー:
awesome-typescript-loader
対ts-loader
?(これについてはコミュニティで意見が分かれているが、awesomeの見解を読んでください) - Webpack設定
module.exports = {
resolve: {
- extensions: ['.js', '.jsx']
+ extensions: ['.ts', '.tsx', '.js', '.jsx']
},
// Source maps support ('inline-source-map' also works)
devtool: 'source-map',
// Add the loader for .ts files.
module: {
loaders: [{
- test: /\.jsx?$/,
- loader: 'babel-loader',
- exclude: [/node_modules/],
+ test: /\.(t|j)sx?$/,
+ loader: ['awesome-typescript-loader?module=es6'],
+ exclude: [/node_modules/]
+ }, {
+ test: /\.js$/,
+ loader: 'source-map-loader',
+ enforce: 'pre'
}]
}
};
ts-loader
とサードパーティライブラリに関する特別な注意:https://twitter.com/acemarke/status/1091150384184229888
移行に関する学術研究
注:経験的ソフトウェアエンジニアリングは望ましいですが、非常に困難です。優しくしてください。しかし、質の高い研究を見つけた場合は共有してください!
私たちの主要な発見は、両方の静的型システムが重要な割合のパブリックバグを見つけることです。Flow 0.30とTypeScript 2.0の両方で、15%のバグを検出することに成功しました!
私が間違っていたこと:型とGitHubにおけるプログラミング言語とコード品質に関する大規模研究も参照してください。
著名な企業とオープンソースによるその他の移行事例
- (2022) Stripe:https://stripe.com/blog/migrating-to-typescript(ポッドキャスト、ツイート)
- Bloomberg - ポッドキャスト形式
- 大規模なTypeScriptの採用 - AirBnBの変換事例と戦略
- AirtableのFlowからTSへのビッグバン移行
- Lyft
- Tiny - ForwardJSでの講演はこちら
- Slack(ポッドキャスト)
- Etsy
- Netflixの採用事例
- Priceline
- Dropbox
- Heap - TypeScriptへの移行で失敗し、その後成功した方法
- Execute Program (Gary Bernhardt) https://www.executeprogram.com/blog/porting-to-typescript-solved-our-api-woes
オープンソース
- Jestの移行(PR)
- Expoの移行(issue)
- Google Workboxの移行
- Chrome DevTools関連の問題
- Atlassianの移行(PR)
- Yarnの移行(issue)
- React Native CLI
- Next.js
- React Router
- Docusaurus v2
- Gatsby
- Redux
- Theme-UI
- Hasura Console
- Storybook
- Dojo 1 -> 2への移行