📄️ 関数式とアロー関数の違いアロー関数は関数式をより手軽に書けるものですが、厳密にはアロー関数は書き方が違うだけではありません。が、まずはアロー関数がfunction式の代替えとして、多くの場合、使えることを覚えておくとよいです。それを知った上で、2つの違いを詳しく知りたい方は「通常の関数とアロー関数の違いは「書き方だけ」ではない。異なる性質が10個ほどある」の解説を御覧ください。
📄️ 関数は値他の言語では関数は特別な立ち位置のことがあります。ある言語では、同じ名前の変数を定義してもエラーにならないのに対し、同じ名前の関数定義はエラーになります。またある言語では、関数を変数に代入できなかったりします。
📄️ 残余引数/可変長引数通常の関数は引数の数が決まっています。JavaScriptでは引数の数に決まりがない関数も作れます。引数の個数が決まっていない引数のことを可変長引数(variable length arguments, variadic arguments)といいます。JavaScriptでは可変長引数は残余引数(rest parameter)と呼びます。
📄️ this引数アロー関数以外の関数とクラスのメソッドの第1引数はthisという特殊な引数を受けることができます。これは使用するコンテキストによってthisの意味するところが変わってしまうため、これらがどのコンテキストで使用されるべきなのかをTypeScriptに伝えるために使います。このthisは呼び出す側は意識する必要はありません。第2引数以降を指定してください。
📄️ キーワード引数とOptions ObjectパターンJavaScriptやTypeScriptの関数には、Pythonにあるキーワード引数のような機能はありません。その代わり、分割代入引数を応用することで、キーワード引数と同じようなことができます。
📄️ アサーション関数やりたいことはほぼType predicateと同じです。Type predicateはboolean型の戻り値に対して使いましたがこちらは例外を投げるかどうかで判定します。上記関数isDuck()をAssertion functionsで書きかえると次のようになります。
📄️ オーバーロード関数オーバーロードとは、関数の名称は同じでありながら異なる引数、戻り値を持つことができる機能です。TypeScriptもこの機能を用意しているのですが、大元がJavaScriptであることが災いし、やや使いづらいです。