自転車とプログラミング

元自転車メーカーのマーケター、今は自社開発企業に勤めるエンジニアが主にプログラミングの話を書きます。

プロを目指す人のためのTypeScript入門 03 プリミティブ型、プリミティブ型の型変換

TypeScript初学者定番の技術書「ブルーベリー本」を読み進めています。

プロを目指す人のためのTypeScript入門 安全なコードの書き方から高度な型の使い方まで (Software Design plus) | 鈴木 僚太 |本 | 通販 | Amazon

プリミティブ型

  • そもそも値とは「プログラムから扱うことのできるデータ」のこと
  • プリミティブとは文字列や数値のようなTypeScriptの基本的な値
  • 値の型の半数はプリミティブ型。オブジェクト型と大別される
  • プリミティブは単一の値、オブジェクトはプリミティブの集合体
  • 数値はnumber型、number型は整数と小数の区別がない
  • TypeScriptのnumberは64ビットの浮動小数
  • 数値リテラルの種類...10進数、2進数、8進数、16進数、指数
    • 指数は1e8, 4e-5といった記法。eXの数値分だけ0が付与される桁を表す。1e8なら100000000
  • bigintは任意整数、誤差なく桁の大きい数値を表現できる。123nというように数値の後にnをつける。型名もbigint
  • numberとbigintではnumberの方が計算速度が速い。誤差を許容できる場合はnumber型のが良い

  • 文字列リテラルエスケープシーケンス(\nみたいなやつ)

    • バックスラッシュ記法がメイン
    • Unicodeコードポイントをつかって書くこともできる。 \u{0041} は Aを表現する。
  • nullとundefindではundefindのほうが言語のサポートが手厚いことから使用推奨

プリミティブ型の変換

import { createInterface } from "readline";

const rl = createInterface({
  input: process.stdin,
  output: process.stdout,
});

rl.question("入力して", (line) => {
  const result = line + 1000;
  console.log(result)
  rl.close;
});

明示的な型注釈がない場合、TypeScriptは型を推測する。例のconst result = line + 1000;ではresultやlineは型注釈をつけていないがstring型になる。これを型推論という。 また、+演算子は左右の型が異なる場合に暗黙的に型変換を行う。この場合なら1000は文字列に変換される。

明示的な型変換を行う場合はNumber関数などが用意されている。Number関数であれば引数でとった値を数値に変換する。これは型変換というか値ごと変換している感じ。 数値に変換できない値が与えられたときはNaNが渡される

おまけ

ES moduleのインポート方法をtsconfig.jsonには記述したが、package.jsonにも記述が必要だった。 エラーメッセージに沿って"type": "module" を追加したら解決。