如何为Js承诺添加Typescript接口?
我是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
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>;
};