概要: このチュートリアルでは、TypeScript の関数オーバーロードについて学びます。
TypeScript の関数オーバーロードの概要
関数オーバーロードにより、1 つの関数に対して複数のシグネチャを定義し、定義されたすべてのシグネチャを処理する 1 つの実装を提供できます。
関数オーバーロードにより、関数はさまざまなタイプの引数を処理できます。さらに、TypeScript コンパイラは、関数シグネチャを使用して、コンパイル時の型チェックを実行し、型の安全性を保証します。
TypeScript 関数オーバーロードは、Java などの静的型付け言語がサポートする関数オーバーロードとは異なります。
TypeScript 関数オーバーロードの例
2 つの数値または文字列の合計を返す単純な関数から始めましょう。
最初に、オーバーロードされたシグネチャを定義します。
function add(a: number, b: number): number;
function add(a: string, b: string): string;
Code language: TypeScript (typescript)
次に、add 関数の実装を提供します。
function add(a: any, b: any): any {
if (typeof a === 'number' && typeof b === 'number') {
return a + b;
} else if (typeof a === 'string' && typeof b === 'string') {
return a + b;
}
throw new Error('Invalid arguments');
}
Code language: TypeScript (typescript)
3 番目に、オーバーロードされた関数を使用します。
console.log(add(10, 20)); // 30
console.log(add('Hello, ', 'world!')); // 'Hello, world!
Code language: JavaScript (javascript)
オプションのパラメーターを備えた関数オーバーロード
関数をオーバーロードすると、必須パラメーターの数が同じである必要があります。一方のオーバーロードが他方のオーバーロードよりもパラメーターが多い場合、追加のパラメーターをオプションにする必要があります。例えば
function sum(a: number, b: number): number;
function sum(a: number, b: number, c: number): number;
function sum(a: number, b: number, c?: number): number {
if (c) return a + b + c;
return a + b;
}
Code language: TypeScript (typescript)
sum()
関数は 2 つまたは 3 つの数値を受け入れます。3 番目のパラメーターはオプションです。オプションにしないと、エラーが発生します。
メソッドオーバーロード
関数がクラスのプロパティの場合、メソッドと呼ばれます。TypeScript もメソッドオーバーロードをサポートしています。例えば
class Counter {
private current = 0;
count(): number;
count(target: number): number[];
count(target?: number): number | number[] {
if (target) {
let values: number[] = [];
for (let start = this.current; start <= target; start++) {
values.push(start);
}
// set current to target
this.current = target;
return values;
}
return ++this.current;
}
}
Code language: TypeScript (typescript)
count()
関数は、渡した引数の数に応じて数値または配列を返すことができます
let counter = new Counter();
console.log(counter.count()); // return a number
console.log(counter.count(5)); // return an array
Code language: TypeScript (typescript)
出力
1
[ 1, 2, 3, 4, 5 ]
Code language: JSON / JSON with Comments (json)
概要
- 関数オーバーロードを使用して、単一の関数に対して複数のシグネチャを定義し、型の安全性を保証します。
このチュートリアルは役に立ちましたか?