Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/394.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Typescript返回类型不匹配_Javascript_Typescript - Fatal编程技术网

Javascript Typescript返回类型不匹配

Javascript Typescript返回类型不匹配,javascript,typescript,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

我使用的是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;
        });
    });
}
createNewUser(name): Promise<any> {
    return this.getRef().then(Ref => {
        let newUser: UserModel = {
            displayName: name,
            ref: Ref
        };

        return this.database.insert(newUser).then(() => {
            return newUser;
        });
    });
}
现在我的问题是,这是typescript中的错误吗? 编译器实际上弄错了嵌套承诺的返回类型。

解决方案 更新至Typescript 2.3或更高版本


根据@Gerrit的建议,更新Typescript 2.3将解决此问题。我已经测试过了,它是有效的。谢谢@Gerrit


当您像createNewUser()一样解析这个承诺时,这个问题已经在

中讨论过了。然后(data=>{console.log(data);})也使用any类型,是否打印了一个数字?或者你的对象?我很确定这个方法会返回一个承诺,其中数字是插入操作的结果。你们可以试试,它实际上会返回newUser对象。因为这就是承诺链的工作原理。“then”实际上创建了一个新的承诺并将其返回。如果我错了,请纠正我。不,我认为这里的问题只是声明。如果insert方法返回一个Promise作为type,那么当您在方法中返回this.database.insert(newUser)时,实际上该方法希望返回一个Promise。你明白我的意思了吗?试着用一个新的承诺来包装你的上一个代码,比如returnnewpromise((resolve,reject)=>{returnthis.database.insert(newUser)。然后(()=>{resolve();returnnewuser;});});并查看是否仍有错误提示。如果没有隐式any as选项,请使用any包装所有内容,以便立即进行测试
createNewUser('test').then(result=>{
    console.log(result);    //result = { displayName: 'test', ref: 999 }
});