1

少し助けが必要TypeScriptです。拡張メソッドの継承を行う方法は?

MyClass1つのメソッドだけで名前が付けられたクラスがあるとしましょうMethod1()

class MyClass {
   constructor () { }

   public Method1(): void {
   }
}

次に、次の名前の新しいメソッドを追加するサブクラスを作成しますMethod2()

class MyClassExtension {
   public Method2(): void {
   }
}

インターフェイスがある場合、同じ名前の新しいインターフェイスを宣言することでこれを行うことができます。

interface MyInterface {
   Method1(): void;
}

interface MyInterface {
   Method2(): void;
}

var x: MyInterface;
x.Method1(); // ok
x.Method2(); // ok

しかし、クラスでこれを行う方法がわかりません:/ any1が私を助けてくれますか?

前もって感謝します!!!

4

2 に答える 2

10

これは標準のクラス継承であるため、次のように実行できます。

class MyClassExtension extends MyClass {
   public Method2(): void {
   }
}

あなたのinterface例では、同じ名前の新しいインターフェースを宣言しているのではなく、MyInterface定義を2つの部分的な定義に分割しています。インターフェイス定義はオープンエンドですが、クラスはオープンエンドではありません。

于 2012-12-07T16:04:41.993 に答える
2

JohnnyHKの回答に対するあなたの回答に基づいて、次のようなことを行うことができますか?

既存のjquery.d.tsが次のようになっている場合:

interface JQuery {
    //...OTHER MEMBERS IN JQUERY
    addClass(classNames: string): JQuery;
    addClass(func: (index: any, currentClass: any) => JQuery);

    attr(attributeName: string): string;
    attr(attributeName: string, value: any): JQuery;
    //...OTHER MEMBERS IN JQUERY
}

interface JQueryStatic {
    //...OTHER MEMBERS IN JQUERY
    parent(selector?: string): JQuery;

    parents(selector?: string): JQuery;

    parentsUntil(selector?: string, filter?: string): JQuery;
    parentsUntil(element?: Element, filter?: string): JQuery;
    //...OTHER MEMBERS IN JQUERY
}


declare var jQuery: JQueryStatic;
declare var $: JQueryStatic;

次に、コードのどこかで行う必要があるのは、拡張メソッドを定義することだけです。次に例を示します。

file1.ts

///<reference path='jquery.d.ts'/>
interface JQuery {
    myNewExtensionMethod() : string;
}
interface JQueryStatic {
    myNewExtensionMethod() : string;
}

jQuery.myNewExtensionMethod = () => {
    return "11";
}

$.myNewExtensionMethod = () => {
    return "11";
}

そしてそれらを使用します:

file2.ts

///<reference path='file1.ts'/>
var result = $.myNewExtensionMethod();
于 2012-12-10T16:58:21.113 に答える