TypeScript 速習チュートリアル

TypeScript の関数

TypeScriptには、関数の引数(Parameters)や戻り値(Return values)に型を指定するための特定の構文があります。関数を制するものはTypeScriptを制すと言っても過言ではありません。

1. 戻り値の型 (Return Type)

関数が返す値の型を明示的に定義できます。

例:戻り値の型指定

// ここでの `: number` は、この関数が数値を返すことを指定しています
function getTime(): number {
  return new Date().getTime();
}

もし戻り値の型を定義しなかった場合、TypeScriptは返される変数や式の型に基づいて自動的に型推論(Type Inference)を試みます。

1.1 void型の戻り値 (Void Return Type)

関数が値を何も返さない(return文がない、または値を返さない)ことを示すには、void 型を使用します。

function printHello(): void {
  console.log('Hello!');
}

2. 引数 (Parameters)

関数の引数は、変数の宣言と同様の構文で型付けされます。

function multiply(a: number, b: number) {
  return a * b;
}

引数の型が定義されていない場合、TypeScriptはデフォルトで any を使用します。ただし、後述するデフォルト引数や型エイリアスのセクションにあるように、他の型情報が利用可能な場合はその限りではありません。

2.1 オプション引数 (Optional Parameters)

デフォルトでは、TypeScriptはすべての引数が必須(Required)であると見なしますが、明示的に「任意(Optional)」としてマークすることも可能です。

例:オプション引数の指定

// `?` 演算子を使用することで、引数 `c` をオプションとしてマークします
function add(a: number, b: number, c?: number) {
  return a + b + (c || 0);
}

2.2 デフォルト引数 (Default Parameters)

引数にデフォルト値を設定する場合、型アノテーションの後に値を記述します。

function pow(value: number, exponent: number = 10) {
  return value ** exponent;
}

この場合、TypeScriptはデフォルト値から型を推論することも可能です。

2.3 名前付き引数 (Named Parameters)

名前付き引数(オブジェクトの分割代入を利用した引数)の型付けも、通常の引数と同じパターンに従います。

function divide({ dividend, divisor }: { dividend: number, divisor: number }) {
  return dividend / divisor;
}

2.4 レストパラメータ (Rest Parameters)

レストパラメータ(残余引数)も通常の引数と同様に型付けできます。ただし、レストパラメータは常に配列になるため、型は必ず配列型(Array type)にする必要があります。

function add(a: number, b: number, ...rest: number[]) {
  return a + b + rest.reduce((p, c) => p + c, 0);
}

3. 型エイリアス (Type Alias)

関数の型は、型エイリアス(Type Alias)を使用して関数本体とは別に定義することができます。

type Negate = (value: number) => number;

// この関数では、引数 `value` には型 `Negate` から自動的に `number` 型が割り当てられます
const negateFunction: Negate = (value) => value * -1;