Edy's Hub

プログラミングやライフスタイルについて書き綴っています

Typescript学習〜『プロを目指す人のためのTypeScript入門』を読んでみて第2章〜

はじめに

業務で使うことのあるTypeScriptを本格的に勉強し始めたところです。

現在絶賛『プロを目指す人のためのTypeScript入門』を読み進めており、その際のメモを備忘録として残しております。

前回の記事 www.edyhub.com

書籍はこちら

第2章

第2章は「基本的な文法・基本的な型」について。

変数宣言

変数宣言の際の型注釈の構文は以下になります。

const 変数: 型 = 式;

例として書くと、

const greeting: string = "Hello, world"

書籍には以下のTipsが書かれていました。

  • 極力 let を避けてconst を使用すべき
  • 変数への再代入は基本的に不要な実装にする
  • letを使用すると読み手の負荷が増す(再代入の可能性を考慮してコードリーディングが必要になるため)

プリミティブ型

TypeScriptには基本的な型が存在します。

それらはプリミティブと呼ばれます。

現時点では文字列、数値、真偽値、BigInt、null、undefined、シンボルの7種類がある様です。

数値

数値はTypeScriptにおけるプリミティブの一つです。 実は10進数以外を扱っても実行結果を見ると適切に数値として認識されます。

2進数/8進数/16進数を扱った場合は下記の様なアウトプットになります。

const binary = 0b1010;
const octal = 0o755;
const hexadecimal = 0xff;

console.log(binary, octal, hexadecimal);

コンパイル結果

% node dist/index.js                                                                                                                                   
10 493 255

またTypeScriptの数値はIEEE754倍精度浮動小数点数です。 何やら難しく感じられますが、整数の精度が53ビットであることを覚えておくと良いと思います。 (正直覚えなくても良い気もします)

そのため、53ビットに収まらない大きさの整数や小数を扱う際には注意が必要です。 例えば以下の出力は直感と異なる計算誤差が生まれます。

console.log(9007199254740993);
console.log(0.1 + 0.2);
9007199254740992
0.30000000000000004

計算誤差を受け入れられない場合は、任意精度計算に対応したライブラリを導入するなど対応が必要になります。

Number型 - TypeScript Deep Dive 日本語版

一方で、最近(ES2020)になってBigInt型が登場しました。 古いブラウザでは利用できない制約がありつつも、誤差なく表すことが可能な型です。 通常の数値(number)よりは計算速度が遅いものの、今後利用シーンが増加する見込みがあるようです。

null と undefined

  • TypeScriptの型で挙げた null と undefined は、それ自体が値の名前
  • どちらも「データがない」状況を示している
  • その状況を示す概念が2種類あるのはJavaScriptやTypeScriptに特有の特徴

著者はサポートが厚いundefinedを推していました。

一致判定

  • ===== の2つを比較したとき、基本的に === のみ使う(同じく !=!== も後者)
  • 後者の方がより厳密な一致判定が行われるから

もう少し具体的に言うと、

== は暗黙的に型変換を行ってから比較を行うため型が異なってもtrueになることがあり、 === は型が異なる場合は常に結果をfalseとなります。

const str: any = "3";

// true 
console.log(str == 3);

// false
console.log(str === 3);

短絡評価

ES2020で追加された論理演算子 ??

例えば

x ?? y

のような場合は「xがnullまたはundefinedのときのみyを返し、それ以外のときはxを返す」というロジックに。

例えば、データがない場合は代替値を返したい場合に活用できますね。

まとめ

第2章も内容は基本的な文法の説明でした。

  • 部分的な差異はあれどプリミティブ型は他の言語との類似点が多い
  • 演算子や制御構文も基本的に一つ言語に慣れていればすんなり理解できた
  • for文の省略記法は初見殺しかも(気になる方は書籍を読んでみてください)