如何为Js承诺添加Typescript接口?

如何为Js承诺添加Typescript接口?,typescript,promise,typescript-generics,Typescript,Promise,Typescript Generics,我是TypeScript新手,尝试为以下代码设置承诺类型 将Promise的类型赋给Promise变量仍然为.resolve、.reject和.Promise const wrappedPromise = function() { var wrappedPromise = {}, promise = new Promise(function(resolve, reject) { wrappedPromise.resolve = resolve; wrapped

我是TypeScript新手,尝试为以下代码设置承诺类型

Promise
的类型赋给Promise变量仍然为.resolve.reject.Promise

const wrappedPromise = function() {
  var wrappedPromise = {},
    promise = new Promise(function(resolve, reject) {
      wrappedPromise.resolve = resolve;
      wrappedPromise.reject = reject;
    });
  wrappedPromise.then = promise.then.bind(promise);
  wrappedPromise.catch = promise.catch.bind(promise);
  wrappedPromise.promise = promise;
  return wrappedPromise;
};
另外,在这里使用泛型有意义吗?如果是的话,怎么办

在这里使用泛型有意义吗

是的,但是你还需要一个接口类型来实现你的包装承诺。(好吧,你不需要它,但它会让生活更简单)。让我们从这个开始:

interface WrappedPromise<T> extends Promise<T> {
    resolve(v: T): void;
    reject(e: Error): void;
    promise: Promise<T>;
}
同样,你可能需要调整一些,但你明白了


您需要仔细查看TypeScript对
Promise
的定义,看看是否还有更多您想要做的事情…

请注意,如果您可以避免的话,我不会这样包装承诺。我一直都能避免它。我承认,你究竟为什么要这样写代码?严肃的问题。@Peter-有了承诺,TypeScript只起了一点作用,主要是智能地处理
async
函数返回类型。像
Promise
这样真正通用的东西的管道是非常重要的。(我不想这样包装它们。)我可能遗漏了上面的几件事。:-)
const wrappedPromise = function<T>(): WrappedPromise<T> {
  var wrappedPromise: Partial<WrappedPromise<T>> = {},
    promise = new Promise<T>(function(resolve, reject) {
      wrappedPromise.resolve = resolve;
      wrappedPromise.reject = reject;
    });
  wrappedPromise.then = promise.then.bind(promise);
  wrappedPromise.catch = promise.catch.bind(promise);
  wrappedPromise.promise = promise;
  return wrappedPromise as WrappedPromise<T>;
};