如何在打字稿中扩展(添加新的原型属性)现有(已声明)的类?

时间:2018-07-04 14:25:52

标签: typescript

我想将新方法catchAndLog添加到现有的Promise类中。

在普通JS中,它很容易使用Object.defineProperty(Promise.prototype, 'catchAndLog', ...)。但是,打字稿似乎不明白这一点。

如何让打字稿编译器知道Promise现在具有一个附加的成员属性,以便在我执行Promise.reject('error').catchAndLog()时不会抱怨?

1 个答案:

答案 0 :(得分:2)

您可以按照与Javascript中相同的方式进行操作,唯一的不足是您需要为新添加的方法添加一个定义,以便打字稿知道它。

declare global { // Remove this enclosing global if you are not in a module
    interface Promise<T> {
        catchAndLog(): Promise<T>
    }
}

Object.defineProperty(Promise.prototype, 'catchAndLog', {

})

Promise.reject('error').catchAndLog()