KDOC 388: 『仕事ですぐに使えるTypeScript』

この文書のステータス

  • 作成
    • <署名>
  • レビュー
    • <署名>

概要

仕事ですぐに使えるTypeScriptは、TypeScriptの入門本。

メモ

  • Babelを使用して最新のJavaScriptから互換性の高いJavaScriptへの変換を行う(p5)
  • (疑問)型定義 ファイル が同時生成できて無駄がない、とあるが、別個のファイルなのだろうか(p5)
    • ゼロからTypeScriptでいけば、型定義ファイルは自動生成される(p6)
  • TypeScriptの型はほかの型付き言語と比べて柔軟である。型システムがプログラミングのサポートの機能しかなく、静的なメモリ配置まで面倒を見るような言語とは異なる(p21)
  • numberは2進数で表した数値表現なので、0.2+0.1などのようにきれいに2進数で表せない数値は誤差が出てしまう(p28)
  • Javascriptはエンコード方式としてUTF-16を採用している(p32)
  • Reactは1行のreturn文のなかで仮想DOMという巨大なJavaScriptオブジェクトを生成する。そこで参考演算子が役立つ(p57)
  • TypeScriptのソースコードはあくまでもJavaScriptに変換されてから実行される。TypeScriptのコンパイラが持つインターフェースやtypeなど固有の型情報はランタイムには存在しない。そのため「このオブジェクトがこのインターフェースを持つとき」という実行文はほかの言語のようにそのまま実行できない(p68)
  • TypeScriptはそれを解決するために型ガードという機能が実装されている。実行時の文脈を解析し、型の選択肢を適切に絞り込んでいく。コンパイラはtypeofやinstanceofなどを見て型ガードと判定する、という(p68)
  • (感想)なぜtypeofは文字列で返すのだろうか。型ガードがある理由と同じようにランタイムにまつわるものだろうか。TypeScriptの層で吸収できそうにも見える
  • 型ガードではTypeScriptのコンパイラだけが知っている情報は扱えない。JavaScriptとして実行時にアクセスできる情報を使って、booleanを返す必要がある(p70)
  • 型アサーションは実行文ではなく、あくまでコンパイラの持つ型情報を上書きするものである。型ガードと異なり、実行時には一切参照しない(p70)
  • 従来のJavaScriptは関数の使い勝手がよかったいっぽうで、言語の他の機能は少なかった。関数を多用したテクニックが多くあった(p75)
  • 実行時の親子関係ではなく、ソースコードという定義時の親子関係を元にしてスコープが決定されることをレキシカルスコープという(p82)
    • (感想)今まで見た説明のなかでもっともわかりやすい説明
    • (感想)逆に実行時に決まるのがダイナミックスコープ
  • 自分が定義された場所の外の変数を束縛した関数をクロージャという(p82)
  • this は変数ではなく、特別な識別子である。レキシカルスコープで束縛できない。クロージャかつ、 this への束縛ができる新文法としてアロー関数が追加された。無名関数をコールバック関数に渡そうとすると this がわからなくなってしまう問題がある。アロー関数を使うとその関数が定義された場所の this の保持までセットで行う。アロー関数が出る以前は this がなくなってしまうため別の名前に退避させていた(p82)
  • TypeScriptのDateは数字に毛の生えたようなものである、という(p88)
  • ブラウザにはperformance.now()という高精度タイマーがあったが、セキリュティの懸念で現在は精度が落とされていてDate.now()とあまり変わらない(p88)
    • (感想)どういうことなのだろう
  • ブラウザはユーザインターフェースであるため、ユーザの利用環境のタイムゾーン情報を持っている。しかし多くのユーザの情報を同時に扱うサーバではタイムゾーン情報も含めて扱うのは手間がかかる。なので、サーバーでは常にエポック時刻で扱うようにする。クライアントがサーバに送信するときはエポック時刻にして送信する。クライアント側でローカル時刻化する。を指針にするとよい(p89)

関連

なし。

Backlinks