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)
関連
なし。