仕事ですぐに使える TypeScriptを読んでいくその3

これは

TypeScriptの学習にとても役立ちそうなドキュメントを教えてもらったので
コツコツと読んでいく記事です。

参考記事

著作権者:フューチャー株式会社(Future Corporation)様

future-architect.github.io

第3章変数

今日は第3章変数です。
TypeScriptとJavaScriptの一番の違いは型。
型が登場する場面を認識して、適切に違いを見れるようにしておく
 ・変数
 ・関数の引数
 ・関数の返り値

他の言語でもだいたい一緒ですね。
参考資料ではまず変数に触れ、型になれていきます。

3.1 三種類の宣言構文

変数宣言は
 ・let
 ・const
 ・var
があって、まずはconstを使うことを検討していく。
letとconstは能力が似ているのだけど、constは変更する必要のないもの
letは代入する可能性があるものと線引きをして使い分けていくように記載されています。
参考資料ではとりあえずconst使っておけば固定だし使いやすいよと書かれていますが、
なんだかちょっと納得できないし気持ち悪いなと思っています。
一応公式のドキュメントを確認しましたが、似た記述になっていましたのでそういう文化圏と解釈しました。

www.typescriptlang.org

現状では可読性、理解しやすさを優先した結果なのかもしれません。
C#のvarと似た感じなのかも。

そしてそのvarですが、JavaScriptでは古い書き方として紹介されており、
スコープ対象も広く使いにくいため最近はあまり使われないようです。

3.2 変数の型定義

Goなどと同じように変数名の後ろに後置で型を書く。

// こんな風に定義してあるものを
let name: string;

// こうするとエラー
name = 123;

代入の場合には右辺のデータ型が自動で設定されるように作られている。

let title = "小説家";  
// 代入せず型定義がない場合はany型に  
let address;  

3.3 より柔軟な型定義

ここで違和感持ってる人もいるよねという救いが。
「柔軟な型システム」とみなして良いらしい。
静的なメモリ配置まで面倒を見るような言語ではないから厳密にしていなくても良いということらしい。
柔軟さの一例として
 • A でも B でも良い、という柔軟な型が定義できる
  →例えば数値と文字列の両方を受け取れる(が、他のデータは拒否する)
 • 値も型システムで扱える

3.4 変数の巻き上げ

 ・var はスコープ内で宣言文の前では、変数はあるが初期化はされてない
 ・const,letはエラーになる
こういった振る舞いを見てもvarは避けておくべきと言える

3.5 変数のスコープ

let、const で宣言した変数のスコープは宣言されたブロック(if、for は条件式部分も含む)の中に限定されます。
スコープが狭くなると、同時に把握すべき状態が減るため、コードが理解しやすくなります。
varではどこからでもアクセスできてしまうため、対象を絞り込むのが大変。

// varを使ったコード
for (<b>var</b> i = 0; i < 10; i++) {
    // do something
}
// これはOKになる
console.log(i); // -> 10

==============================

// letを使ったコード
for (<b>let</b> i = 0; i < 10; i++) {
    // do something
}
// これはエラーになる
console.log(i);

今日はここまで。
明日は第 4 章をやっていきます。