2

次のインターフェースがあります。

interface Ixy 
{
    X: string;
    Y: string;
}
interface Ixz 
{
    X: string;
    Z: string;
}

この機能:

export function update(json: Ixy) {
    var a = json.X;
}

この関数は、次の 2 つの場所から呼び出されます。

export function update1(json: Ixy) {
   update(json);
}
export function update2(json: Ixz) {
   update(json);
}

タイプスクリプトでこれを機能させる最善の方法を誰かが説明してくれませんか。現在、update1 は問題ありませんが、update2 は署名が一致していないことを示しています。これを修正してjsonのタイプをanyに変更できる唯一の方法はありますか、それとももっと良い方法がありますか?

4

1 に答える 1

1

いくつかの方法があります。おそらく最善の方法はIxx、共通のプロパティを持つ基本インターフェイスを作成しX、それを拡張して and を作成Ixyし、パラメータ タイプとしてIxzを実装updateすることです。Ixx

interface Ixx 
{
    X: string;
}

interface Ixy extends Ixx
{
    Y: string;
}
interface Ixz extends Ixx
{
    Z: string;
}

export function update(json: Ixx) {
    var a = json.X;
}

export function update1(json: Ixy) {
   update(json);
}
export function update2(json: Ixz) {
   update(json);
}

これが機能するのは、IxyIxzの両方が extendsIxxと so の条件を満たしているからですjson is Ixx。これは、基本クラスを拡張するクラス (または基本インターフェースを拡張するクラス) でも機能します。

TypeScript に関する文献はまだ多くありません。おそらく、他の言語からのインターフェイスの一般的な紹介が役立つでしょう。これは、TS 固有のものではなく、実際にはインターフェイスの使用に関するクロスランゲージの質問であるためです。

Java インターフェイス: http://docs.oracle.com/javase/tutorial/java/IandI/createinterface.html

C# インターフェイス: http://www.codeproject.com/Articles/18743/Interfaces-in-C-For-Beginners

于 2012-11-14T09:55:02.077 に答える