繁体   English   中英

打字稿:为承诺中的解析参数指定正确的返回类型

[英]Typescript: Specifying proper return type for resolve parameters in promises

昨天,我决定使用Typescript,并尝试将一些基本的JavaScript Promise示例移植到Typescript Promise。 但是,在移植样本的过程中,我遇到了一个仍然无法解决的问题。 试图谷歌也没有用。

场景:我确实有一个返回Promise的函数,该Promise在执行时解析为number 我还想在此样本上测试一些then场景。

请在下面找到代码示例:

function test_promise(): Promise<number>{
    return new Promise((resolve, reject) :number => {
        let result:number = 10;
        resolve(result);
    }).then(result => {            // first then
        console.log("Result: " + (typeof result)); // Result: number
        return result * 2; //
    }).then(result => {            // second then
        return result * 2;
    }).then(result => {            // third then
        return result * 2;
    });
}

我还添加了两个屏幕截图,以提高清晰度。

屏幕截图1:

在此处输入图片说明

屏幕截图2

在此处输入图片说明

我目前尚不清楚几件事:

  1. 在屏幕快照1中,提示项没有说typeof结果是number ,而是在console.log打印它时说它是number 有什么不同?
  2. 如果它在控制台中显示的是number ,那么为什么它不允许我对此执行乘法运算。

为了使此示例正常工作,我需要在此处进行哪些更改?

希望你们能对此有所了解。 谢谢。

问候,

解决方案是通过在new Promise之后直接添加<number>来显式指定实例化的第一个Promise对象的值类型,如下所示:

    /* Add <number> after new Promise */
    return new Promise<number>((resolve, reject) => {
        let result:number = 10;
        resolve(result);
    }).then(result => {            // first then
        console.log("Result: " + (typeof result)); // Result: number
        return result * 2; //
    }).then(result => {            // second then
        return result * 2;
    }).then(result => {            // third then
        return result * 2;
    });

这样做会通知Typescript第一个Promise值类型,从而可以推断出链中后续Promise的值类型。

这将反过来解决您的问题。 有关Typescript中泛型的更多信息,请参见此处 希望有帮助!

检查以下行:

return new Promise((resolve, reject) :number => {

: number表示函数(或意义不大的构造函数)正在返回数字。 这不是真的! new Promise显然会返回Promise,而您不必指定它。

您想说的也许是Promise处理的类型。 您可以使用角括号来做到这一点:

return new Promise<number>((resolve, reject) => {

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM