1

我需要一点帮助TypeScript。如何做扩展方法继承?

假设我们有一个MyClass只用一个方法命名的类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定义拆分为两个部分定义。接口定义是开放式的,但类不是。

于 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;

然后,您需要在代码中某处做的就是定义扩展方法,例如:

文件1.ts

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

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

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

然后使用它们:

文件2.ts

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