如何为 Js promises 添加 Typescript 接口?
How to add Typescript interface for Js promises?
我是 TypeScript 的新手,正在尝试将 Promises 类型设置为以下代码
将 Promise<any>
的类型提供给 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;
};
此外,泛型 的使用在这里有意义吗?如果是,那又如何?
does use of generics make sense here
是的,但是您还需要一个用于包装承诺的接口类型。 (好吧,您 不需要 它,但它会让生活变得更简单)。让我们从那个开始:
interface WrappedPromise<T> extends Promise<T> {
resolve(v: T): void;
reject(e: Error): void;
promise: Promise<T>;
}
您可能想在这里或那里调整一些东西,但是例如,由于您不知道 then
处理程序可能会将通过它的 fulfillment 转换成什么,Promise<any>
对then
的 return 类型。
然后这是一个为你的函数分配类型参数的问题,并且可能在 wrappedPromise
上使用 Partial
包装器,因为它最初不具有 WrappedPromise
需要的所有属性(并且这意味着一旦我们知道它具有所有部分,我们就需要在最后使用类型断言):
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>;
};
同样,您可能需要调整一些,但您明白了。
您需要仔细查看 TypeScript 对 Promise
的定义,看看是否还有更多您想要做的...
我是 TypeScript 的新手,正在尝试将 Promises 类型设置为以下代码
将 Promise<any>
的类型提供给 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;
};
此外,泛型 的使用在这里有意义吗?如果是,那又如何?
does use of generics make sense here
是的,但是您还需要一个用于包装承诺的接口类型。 (好吧,您 不需要 它,但它会让生活变得更简单)。让我们从那个开始:
interface WrappedPromise<T> extends Promise<T> {
resolve(v: T): void;
reject(e: Error): void;
promise: Promise<T>;
}
您可能想在这里或那里调整一些东西,但是例如,由于您不知道 then
处理程序可能会将通过它的 fulfillment 转换成什么,Promise<any>
对then
的 return 类型。
然后这是一个为你的函数分配类型参数的问题,并且可能在 wrappedPromise
上使用 Partial
包装器,因为它最初不具有 WrappedPromise
需要的所有属性(并且这意味着一旦我们知道它具有所有部分,我们就需要在最后使用类型断言):
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>;
};
同样,您可能需要调整一些,但您明白了。
您需要仔细查看 TypeScript 对 Promise
的定义,看看是否还有更多您想要做的...