繁体   English   中英

如何在TypeScript中使用方法动态扩展类?

[英]How to dynamically extend class with method in TypeScript?

如何在TypeScript中使用方法动态扩展类? 有什么例子吗? 我尝试:

UsersBlocksMyOrders.prototype.myFunc = function():any{
  alert('23434');
};

但是编译器给我一个错误。

您还需要执行以下操作:

interface UsersBlocksMyOrders {
    myFunc(): any;
}

否则,编译器对此一无所知。


编辑

即使使用现有的类,它的确也有效。
例如:

interface String {
    logit(): void;
}

String.prototype.logit = function () {
    console.log(this);
}

let a = "string";
a.logit();

操场上的代码

如果您将添加更多相关信息,将更容易为您提供帮助。


第二次编辑

您没有提到导入。
因为您要在另一个模块(称为模块增强)中进行更改,所以需要执行以下操作:

Import { UsersBlocksMyOrders } from "../pages/users/blocks/myorders";

declare module "../pages/users/blocks/myorders" {
    interface UsersBlocksMyOrders {
        logit(): void;
    }
}

UsersBlocksMyOrders.prototype.logit = function () { console.log(this); }

但是我从来没有尝试过相对路径,为什么要这么做?
它是您的源代码,您可以直接在pages/users/blocks/myorders进行pages/users/blocks/myorders ,就像尝试这样做不是一个好主意。

这可能会有所帮助( 从此处开始 ):

function extend<T, U>(first: T, second: U): T & U {
    let result = <T & U>{};
    for (let id in first) {
        (<any>result)[id] = (<any>first)[id];
    }
    for (let id in second) {
        if (!result.hasOwnProperty(id)) {
            (<any>result)[id] = (<any>second)[id];
        }
    }
    return result;
}

class Person {
    constructor(public name: string) { }
}
interface Loggable {
    log(): void;
}
class ConsoleLogger implements Loggable {
    log() {
        // ...
    }
}
var jim = extend(new Person("Jim"), new ConsoleLogger());
var n = jim.name;
jim.log();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM