KDOC 388: 『仕事ですぐに使えるTypeScript』
この文書のステータス
- 作成
- <署名>
- レビュー
- <署名>
概要
仕事ですぐに使えるTypeScriptは、TypeScriptの入門本。
メモ
- 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)
- 集約式は問い合わせによって選択される行に対して集約関数を適用することを表現する。集約関数は、たとえば入力の合計や平均などのように、複数の入力を単一の出力値にする(p54)
- 集約式 name は 集約式 ALL name と同じ意味。それぞれの入力行に対して1回ずつ集約を呼び出す。ALLはデフォルトである。DISTINCTは重複しない値の集約を呼び出す(p54)
- COLLATE句は式の称号順序規則を上書きする(p60)
関連
なし。