メイドのチラシ裏

何かアウトプットしていかんとな、と焦るおじさんの雑記。

TypeScript 導入〜実行までのメモ

導入

公式ドキュメント通り、npmコマンドでインストールする。 https://www.typescriptlang.org/docs/handbook/typescript-in-5-minutes.html

$ npm install -g typescript

これで準備OK。

tsc コマンドで .ts.jsコンパイルが可能になった。

これまで通り(Javascript)の書き方

関数 hello を宣言して呼んでいるだけ。

hello.ts

// 従来のやり方(javascript)
function hello(str) {
  console.log('Hello ' + str + ' !!');
}

hello('TypeScript');

コンパイルして、実行してみる。

$ tsc hello.ts
$ node hello.js

Hello TypeScript !!

もちろん、hello にnumberを渡しても怒られない。

hello.ts

// 従来のやり方(javascript)
function hello(str) {
  console.log('Hello ' + str + ' !!');
}

hello(50);

コンパイルして、実行してみる。

$ tsc hello.ts
$ node hello.js

Hello 50 !!

怒られない。

型を明記しなかった場合、暗黙的にany型になるようだ。

TypeScriptの書き方

今度はTypeScriptの書き方。

関数 hello を宣言して呼んでいるのは同じだが、

以下の2点を明記して宣言している。

  • 引数 str はString型であること
  • 返り値が存在しないこと(void)
hello.ts

// 静的型付けをしたやり方(TypeScript)
function hello(str: String): void {
  console.log('Hello ' + str + ' !!');
}

hello('TypeScript');

実行結果は変わらない。

$ tsc hello.ts
$ node hello.js

Hello TypeScript !!

ここで、hello に数値を渡してみると…

hello.ts

// 静的型付けをしたやり方(TypeScript)
function hello(str: String): void {
  console.log('Hello ' + str + ' !!');
}

hello(50);

エラーが発生し、コンパイルに失敗した。

$ tsc hello.ts 

hello.ts:5:7 - error TS2345: Argument of type '50' is not assignable to parameter of type 'String'.

5 hello(50);
        ~~


Found 1 error.

引数はString型だよって明記されているのにnumberを渡したからだ(そりゃそうじゃ)。

静的型付け言語となったJavasctiptで、心理的安全性を確保して実装しよう!

感想

CやJavaから入った人間なので、Javascriptの型制限が緩いことにややストレスがあった。

(規模の大きいプロジェクトになるとメンバーも多いのでその辺がガバガバになったりね……)

静的型付け言語だとコンパイル時にエラーを吐いてくれるので、

「そのまま本番環境に乗ってしまった!」

なんてこともないし安心よね。

そもそも単体試験で防げってツッコミはなしで…。

あ、TypeScriptでJestって使えるのかな…試してみなきゃ。