typescript - Typescript 编译器无法从 Promise 解析调用中推断类型
问题描述
使用以下代码段时,编译器无法识别 的类型item1
,它将分配为未知(请参阅将鼠标悬停在Typescript Playground上的 var 名称时
为什么打字稿编译器不能推断出该类型将是一个字符串?
const getItem = () =>
new Promise((resolve) => {
return resolve('a title');
});
(async function() {
const item1 = await getItem();
const item2 = await getItem();
})();
解决方案
问题是 Promise 的类型无法从传递给 resolve 方法的类型中推断出来。resolve 方法从传递给 Promise 构造函数的泛型类型中获取其类型,而不是相反。在这种情况下,您也不需要使用return
with resolve。
您可以通过以下两种方式之一解决此问题。
string
您应该作为泛型类型参数传递。使用Promise<string>((resolve) => { ...
,它将告诉 typescript 您希望将字符串传递给resolve
函数。如果你尝试resolve
用其他东西调用,你会看到一个类型错误。Promise.resolve('a title');
如果您实际上并没有在等待任何东西,而只是想将一个字符串包装在一个 Promise 中,那么您可以使用这样的结构。这样,可以推断出泛型类型参数。
推荐阅读
- javascript - 通过 Whatsapp 与 React Native 共享图像和文本
- python - 使用两列的值作为索引/列和第三列的值创建新的 Pandas DataFrame
- css - 具有 css 自定义属性的条件样式
- algorithm - 如何检查双向链表是否在java中正确链接?
- sqlite - Android - 如何使自定义适配器显示数据,如简单数组适配器但带有编号的行?
- python - 带有键和值的字典理解
- excel - 将 Excel 表格导出到 Word 时设置页面方向
- r - 尝试导出 DF 并出现此错误:“EncodeElement”中未实现的类型“列表”
- android - 使用 Gson 和 Retrofit2 解析带有动态字段的 JSON
- java - 嵌入式码头使用 RewriteHandler 和 SecuredRedirectHandler 重写和重定向 http 到 https 和路径