TypeScript: Typeはいつ書くのか

今回もTypeScriptについて。Typeはいつ書くのか再確認。まずはTypeを書かなくてもいい場合について。

Typeを書く必要がないパターン

TypeScriptを勉強し始めると、なんでもかんでもTypeをつけてしまいそうになるが、実はannotation(Typeを書くこと)が不用な場合もある。
例えば以下のようにuserNameという変数にはstringの型が入りますよと書きたくなるかもしれない。書いてもエラーにはならないが、これは実は不用なのだ。

TypeScript
let userName: string = "Phineas";  // string型と書く必要無い
console.log(userName)

その証拠に型を書かずにuserNameの上にカーソルをホバーさせてみると、stringが隠れている。TypeScriptは変数に代入された値からこれがstringだと認識してくれるので、わざわざstringと書かなくてもいいというわけだ。

Typeを書いた方がいいパターン

ところがもしこれが”Phineas” | “Ferb”のいずれかしか代入されないような場合であれば、typeもそのように明示しておく方が良い。ただ、いずれにしてもstring型なので、書かなくてもTypeScriptは怒らない(赤波線は出ない)。

TypeScript
let userName: "Phineas" | "Ferb" = "Phineas";

Typeを必ず書く必要があるパターン

次に、Typeを書かないとTypeScript的にエラーが出てしまうケースを見る。具体的にはfunctionのパラメータはTypeを求めてくる。先ほど見たように、変数userNameはstringと認識されるが、functionを定義している部分のparameterは認識されていない。

TypeScript
let userName = "Phineas"; // userNameはstringと自動認識される

function greet(userName) {
  console.log("Hello, " + userName + "!!");
}

greet(userName) // userNameはstringと自動認識される

確認するとTypeがanyとなってしまっている。それもそのはず。parameterで使用している”userName”はletで定義した変数”userName”とは全く別物で、inputされた”何か”を指すためのものなので、”aaa”でも何でもいい部分だから型を指定してあげないと分かってくれないらしい。

ちなみにAnyという型は、最初のうちは使いたくなる衝動に駆られていたが、これは使ってはいけない型であると学んだ。TypeScriptはJavaScriptにType Safety(型安全性)を追加するために利用する開発ツールである。それなのにAnyを使うということは、Typeを無視し、Typeのチェックをスキップするということなので、TypeScriptを使う意味が全くなくなってしまうということになるのだ。

Any型が検知されたところに赤波線が出てしまっていたので今回はstring型と宣言する。

TypeScript
let userName = "Phineas"; 

//string型と宣言する
function greet(userName : string) { 
  console.log("Hello, " + userName + "!!");
}

greet(userName) 

これでエラーが消えたので一安心。だが、functionはinput (parameter)とoutputがある。inputはstring型と明示したが、outputはどうなっているのか。これもfunction greetの上でマウスをホバーすると、voidと出てくる。Void型はreturn される値がないfunctionの為にある型。

同じものをreturnしたらstring型と自動識別された。今回は自動識別されたので、いちいちタイプは書かなくていいということになる。

でも世の中、string, number, boolean, Date, みたいに単純なTypeばかりではない。このTypeは何一体なの?というときはものすごく頻繁にある。例えばonChangeのeventのタイプとか、React Component丸ごととかをparameterに入れたい時など。もちろん(意外にも?)それぞれTypeが存在する。
また、それと同じくらい頻繁に、時と場合によってfunctionで扱うタイプが変わるという場合がある(ジェネリクス)。近々取り上げたいなと思っている。


野菜の定期便に銀杏が入っていた。
自分で調理したことないのでレシピを調べていたら、
食べすぎると中毒で死ぬって書いてあった・・・怖すぎ!

類似投稿