打字稿嵌套的Promises返回类型不匹配

时间:2017-05-21 17:11:27

标签: javascript typescript

我正在使用typescript 2.2.1

带编译错误的代码:

createNewUser(name): Promise<UserModel> {
    return this.getRef().then(Ref => {  //getRef() return Promise<number>
        let newUser: UserModel = {
            displayName: name,
            ref: Ref
        };

        return this.database.insert(newUser).then(() => {  //database.insert() return Promise<void>
            return newUser;
        });
    });
}

这是编译器的错误:

  

输入'承诺&lt;数&GT;”不能分配给'Promise&lt;的usermodel&GT;”。类型'number'不能分配给'UserModel'类型。

代码没有编译错误:

createNewUser(name): Promise<any> {
    return this.getRef().then(Ref => {
        let newUser: UserModel = {
            displayName: name,
            ref: Ref
        };

        return this.database.insert(newUser).then(() => {
            return newUser;
        });
    });
}

请注意,为了解决这个问题,我只更改了此方法的返回类型。 此代码在运行时也运行良好。

澄清:

createNewUser('test').then(result=>{
    console.log(result);    //result = { displayName: 'test', ref: 999 }
});

现在我的问题是,这是打字稿中的错误吗? 编译器实际上误认为嵌套Promise的返回类型。

1 个答案:

答案 0 :(得分:0)

<强>解决方案

更新到Typescript 2.3或以上

根据@Gerrit的建议,更新到Typescript 2.3将解决此问题。我测试了它,它的工作原理。谢谢@Gerrit

此问题已在Typescript github

中讨论过