Open5

TypeScript Documentaryまとめと感想

convers39convers39

タイプシステムはjsにとって革命的

  • 開発者体験の向上
    • go to def/ref, rename symbol, などcode navigation, auto completion, refactorが機能することで、効率が良くなる
    • 型が分かるかつ合わないとエラーになる安心感
  • 型システムがあるこそjsの開発がスケールする
    • 例:vscodeの誕生と緊密に→tsがないとvscodeの開発が無理らしい
    • jsだとデバッグは苦痛
  • structural typing
    • 名前からではなく、属性とメソッドでタイプを決める
  • tsの3つの視点と価値
    • タイプシステム
    • トランスパイラー
    • extra info for VM
  • fix vs replace
    • tsはjsをフィックスしようとしている
    • 同じ頃にV8を作ったチームはjsの代替品としてDartを開発し始めてる
    • js is not broken enough, dart didnt fix it enough either
    • 結局新しい言語を学ぶコストと、既知の言語の新しいフィーチャーを学ぶコストの差もある
  • jsを複雑化しているのではないか?
    • tsを使って問題を解決したがそもそも使わないと存在しない問題だったりする
    • ただ、overtime the benefits of type system overcome the efforts of adding types everywhere
      • 技術の世界では常にtrade-off
convers39convers39

TSのオープンソース

  • MS社内の変化
    • MSではtsの開発までにlicensed softwareの方が全てで、OSSに関してはほぼ無知な状態
    • OSSにしてどんなbusiness valueが提供できるかの問い
      • 一般的な答えがあるとしたら、match the business requirements in the most efficient way possible and have it as maintainable as possible
    • open source is a cancer -> embrace the world be a good citizen
    • ビジネスモデルも大きく転換している背景もある
  • @types の誕生
    • DefinitelyTyped, Typingsなどの、タイプ定義だけ集約するライブラリーがあったが、管理がどんどん不可能になる
    • 最終的にTSがタイプ定義を@typesへ集約
  • embrace the world
    • AtScriptとのtsと似てる言語がgoogle angularチームに開発されていた
      • ts側がasとコンタクトして、同じニーズを解決する意味で最終的に両者はマージ
      • decorator!!
      • 最終的にgoogleにもtsが浸透
    • 現在の主流のFE側FWと緊密に連携して、各FWにもtsがfirst class supportとなっている
      • 相互的な効果があって、FW側もtsのサポートを重視する
      • BE側も、deno, bunとか
    • facebookのFlowはどちらかというと社内のニーズを解決するために作られたもので、コミュニティーのために作られたTSとは目的がちがう
convers39convers39

JSとの関係性をsuperset以上

  • TSチームはJSの定義を決めるTC39に直接参加
  • 言語というよりjsを拡張するツールのセットでもある
    • vscodeとか、IDEでjsのコードのタイプなどが分かるのもtsのパーサーの力
    • js docも
  • 将来的にJSへdeforkする可能性?
    • tsがなくなるもしくは存在を感じなくなる日が来るかも
convers39convers39

全体的に思ったのは、一つの技術・プロダクトの成功にはいろんな要素が絡んでいるが、TSのケースを思うと

  • 開放的かどうか
    • =OSSだけではない(Flowを参考)
    • コミュニティードリブンかどうか、他の技術と積極的に連携するかどうか
  • ニーズ・ペインを解決できるかどうか
    • 開発者視点で言うと開発者体験
    • 言語視点で言うとタイプシステム(とトランスパイラーなど各種ツール)
      • さらにいうと将来の仕様変更、言語の行き先にある程度のガイドライン
    • プロダクト視点で言うとコード安定性、メンテナンスコスト