関数宣言 (function declaration)
#
関数宣言構文JavaScriptの関数宣言はfunction構文を使います。
js
functionhello () {return "hello";}
js
functionhello () {return "hello";}
#
関数宣言構文の型注釈TypeScriptでは関数宣言の引数と戻り値に型注釈を書けます。
ts
functionincrement (num : number): number {returnnum + 1;}
ts
functionincrement (num : number): number {returnnum + 1;}
引数の型注釈を省略した場合、コンパイラーはany
型と暗黙的に解釈します。
ts
functionincrement (num ): number {returnnum + 1;}
ts
functionincrement (num ): number {returnnum + 1;}
コンパイラーオプションのnoImplicitAny
をtrue
に設定することで、引数の型注釈を必須にできます。
ts
functionParameter 'num' implicitly has an 'any' type.7006Parameter 'num' implicitly has an 'any' type.increment (): number { num returnnum + 1;}
ts
functionParameter 'num' implicitly has an 'any' type.7006Parameter 'num' implicitly has an 'any' type.increment (): number { num returnnum + 1;}
次の例のように定義済みの関数プロパティに再代入する形で関数を上書きする場合はbutton.onclick
の引数event
の型がMouseEvent
と定義されているため、その型情報から代入する関数の引数の型を省略しても、event
の型をMousetEvent
と推論してくれます。
ts
constbutton =document .createElement ("button");button .onclick = function (event ) {console .log (event .target );Property 'hoge' does not exist on type 'MouseEvent'.2339Property 'hoge' does not exist on type 'MouseEvent'.console .log (event .); hoge };
ts
constbutton =document .createElement ("button");button .onclick = function (event ) {console .log (event .target );Property 'hoge' does not exist on type 'MouseEvent'.2339Property 'hoge' does not exist on type 'MouseEvent'.console .log (event .); hoge };
戻り値の型注釈を省略した場合、コンパイラーがコードから型推論します。
ts
functionincrement (num : number) {returnnum + 1;}constvalue =increment (1);
ts
functionincrement (num : number) {returnnum + 1;}constvalue =increment (1);
return
が複数あり違う型を返している場合推論される型はユニオン型になります。
ts
functiongetFirst (items : number[]) {if (typeofitems [0] === "number") {returnitems [0];}return null;}getFirst ([1, 2, 3]);
ts
functiongetFirst (items : number[]) {if (typeofitems [0] === "number") {returnitems [0];}return null;}getFirst ([1, 2, 3]);