我们如何在TypeScript中为非全局接口创建扩展方法?

时间:2018-11-07 19:57:38

标签: typescript extension-methods

我目前正在学习TypeScript,但是对于如何为非全局接口实现扩展方法感到非常困惑。考虑以下示例:假设我有一个interface定义了Cart,如下所示:

interface Cart {
    id(): string,
    name(): string,
    quantity(): number

    /* Other methods */
}

然后,我想添加一个类似于以下内容的扩展方法:

Cart.prototype.isValid = function() {
    return this.quantity() > 0;
}

这显然是行不通的,因为Cart不是一种类型,但是我很困惑,因为Promise也被定义为interface,但是我可以成功地向其中添加扩展方法。例如:

declare global {
    interface Promise<T> {
        hello(): string
    }
}

Promise.prototype.hello = function() {
    return "Hello!";
}

export {};

是否可以扩展Cart之类的非全局接口,如果可以,我该怎么做?

1 个答案:

答案 0 :(得分:0)

在您的情况下,购物车只是一种类型。没有对象,您不能扩展类型/接口引用的原型。没有要扩展的原型,您可以使用一些实现Cart的对象来实现。

就Promise而言,它是一个浏览器API,如果您在浏览器上进入控制台并键入Promise,则会看到那里有一个对象。当像示例一样扩展promise原型时,您没有扩展接口,而是提供了此对象。

如果需要的话,一种可能的解决方案是接口组成,例如:

default