首页 > 解决方案 > 向 Promise 原型添加新方法时出现问题

问题描述

打字稿 3.1.2

我搜索了许多堆栈溢出问题和在线文章,并且我多次看到有关修改现有打字稿类的问题的相同类型的答案,例如StringArray<T>,但我似乎无法让这个Promise<T>类工作。

我已经阅读了所有这些,没有运气:

如何在 TypeScript 中定义全局函数?

如何在 Typescript 中添加带有扩展原型的文件

如何在 Typescript 中扩展字符串原型并在接下来使用它?

Cypress 自定义 TypeScript 命令不是函数

在 TypeScript 中扩展数组


这是我当前的代码(我尝试了很多变体):

承诺.d.ts

declare global {
    export interface Promise<T> {
        catchWrapper(): Promise<T>;
    }
}

Promise.ts

Promise.prototype.catchWrapper = function<T>(this: Promise<T>): Promise<T> {
    return Promise.prototype.catch.apply(this, [e => {
        console.log(`catch wrapper. ${e}`);
        }]);
    }

(我试过添加export { }Promise.ts,它没有帮助)

另一个.ts

import '../theDir/Promise'

anAsyncMethod().catchWrapper();

这一切都可以编译,但我不断收到运行时错误:

UnhandledPromiseRejectionWarning: TypeError: anAsyncMethod().catchWrapper is not a function

我的 catchWrapper() 实现是否与编译器的接口声明不匹配?

有想法该怎么解决这个吗?

标签: typescript

解决方案


尝试更改内容或更改Promise.d.ts为:

declare interface Promise<T> {
  catchWrapper (): Promise<T>;
}

.d.ts如果它位于您的rootDirtypeRoots配置文件中指定的一个中,也不需要导入。


推荐阅读