TypeScript 言語仕様のセクション 6.3 では、関数のオーバーロードについて説明されており、これを実装する方法の具体的な例が示されています。ただし、次のようなことを試した場合:
export class LayerFactory {
constructor(public styleFactory: Symbology.StyleFactory) {
// Init...
}
createFeatureLayer(userContext: Model.UserContext, mapWrapperObj: MapWrapperBase): any {
throw new Error('not implemented');
}
createFeatureLayer(layerName: string, style: any): any {
throw new Error('not implemented');
}
}
関数パラメータが異なる型であるにもかかわらず、重複した識別子を示すコンパイラ エラーが発生します。2 番目の createFeatureLayer 関数に追加のパラメータを追加しても、依然としてコンパイラ エラーが発生します。アイデアをお願いします。
ベストアンサー1
TypeScript でオーバーロードする場合、複数のシグネチャを持つ実装は 1 つだけになります。
class Foo {
myMethod(a: string);
myMethod(a: number);
myMethod(a: number, b: string);
myMethod(a: string | number, b?: string) {
alert(a.toString());
}
}
TypeScript では、実際の実装ではなく、メソッド呼び出しの可能なシグネチャとして 3 つのオーバーロードのみが認識されます。実装シグネチャは、すべてのオーバーロードと互換性がある必要があります。
あなたの場合、パラメータに十分な共通性がないため、私なら個人的には異なる名前の 2 つのメソッドを使用します。そのため、メソッド本体には、何を行うかを決定するために多くの「if」が必要になる可能性があります。