TypeScript报错:Promise<wikiSummary>缺少wikiSummary类型属性如何解决?
错误原因与解决方法:Type 'Promise' 无法赋值给类型 'wikiSummary'
这个错误的核心原因很直接:所有async函数的返回值都会被自动包装成Promise类型,不管你在函数内部用await拿到了什么类型的值。
看你的代码:
async function getSummary(searchword: string) { try { const response: wikiSummary = await wiki.summary(searchword); return response; // 这里返回的是wikiSummary,但async函数会把它包装成Promise<wikiSummary> } catch (error) { console.log(error); } }
你以为getSummary返回的是wikiSummary,但实际上它的真实返回类型是Promise<wikiSummary>。当你把它直接赋值给标注了wikiSummary类型的变量res时,类型不匹配,自然就报了那个错误——Promise对象里没有wikiSummary定义的那些属性(type、title等)。
解决方法有两种:
- 在
async函数内部用await获取Promise的结果:
// 必须放在async函数里才能用await async function init() { const res: wikiSummary = await getSummary(search); // 这里就可以正常使用res的属性了 } init();
- 用
.then()回调处理异步结果:
getSummary(search).then(res => { // 这里res自动推断为wikiSummary类型 console.log(res.title); });
你说移除类型注解就不报错,是因为TypeScript会自动把res的类型推断为Promise<wikiSummary>,和函数返回类型匹配了,所以不会报错——但这时候你直接用res.title还是会报错,因为Promise对象本身没有title属性,你还是得用await或.then()去取里面的实际值。
内容的提问来源于stack exchange,提问作者Recleun
相关产品推荐
相关产品推荐

