この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。
TypeScriptで関数を作る際の基本は、JavaScriptと同じです。ただし、型指定が追加されていきます。型指定があることで、どのように便利になるのか、そこから話を始めていきましょう。
JavaScriptで関数を定義する場合、リスト1のようなコードを記述します。
function divide(num1, num2) { return num1 / num2; }
この関数「divide()」は引数を2個受け取り、引数の割り算を実行した結果を返します。この関数を定義した際、処理内容から、その引数には数値が渡されることを前提にしています。ところが、JavaScriptでは、リスト2のコードのように、引数として文字列を渡しても、問題なく実行できてしまいます。
const ans = divide("こんにちは", "さようなら");
もちろん、関数の実行結果であるansは「NaN」(Not a Number)となり、さまざまな問題の原因になります。
TypeScriptならば、コーディング段階でエラーにすることができます。それが、引数の型指定です。先ほどのdivide()関数の引数にデータ型を定義すると、リスト3のようになります。
function divide(num1: number, num2: number) { return num1 / num2; }
このように定義した関数の引数に対して文字列を渡そうとすると、図1のようなエラーになります(以下、「Visual Studio Code」を利用)。
同様に、戻り値に対しても型指定ができます。例えば、先ほどのdivide()関数のように、戻り値として数値型を想定している関数の場合は、リスト4のように記述します。
function divide(num1: number, num2: number): number { return num1 / num2; }
このように戻り値のデータ型「number」を定義した関数内で、違うデータ型の値を返すコードを記述すると、図2のようなエラーになります。
さらにreturn文を記述し忘れた場合も、図3のようなエラーになります。
戻り値のない関数を定義したい場合は、戻り値の型として「void」と記述します。例えば、次のような関数です。
function divide(num1: number, num2: number): void { const ans = num1 / num2; console.log(ans); }
この場合、リスト4とは逆に、関数内にreturn文を記述すると、図4のようなエラーになります。
ここまでの内容を踏まえて、データ型を記述した関数シグネチャを構文としてまとめておきます。
[構文]関数シグネチャ function 関数名(引数: データ型, ……): 戻り値のデータ型
戻り値のデータ型には特殊なものがあります。「never」です。neverというデータ型は、「発生することがない値」を表し、戻り値がneverの関数は、そもそも制御が元に戻ってこない、という意味になります。例えば、次のような関数です。
Copyright © ITmedia, Inc. All Rights Reserved.