TypeScript 関数のオーバーロード 質問する

TypeScript 関数のオーバーロード 質問する

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」が必要になる可能性があります。

おすすめ記事