Javascript Typescript返回类型不匹配
我使用的是typescript 2.2.1 出现编译错误的代码: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
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 }
});