当使用以下代码片段时,编译器无法识别 的类型item1,它将分配为未知(请参阅将鼠标悬停在Typescript Playground上的 var 名称时
为什么打字稿编译器无法推断该类型将是字符串?
const getItem = () =>
new Promise((resolve) => {
return resolve('a title');
});
(async function() {
const item1 = await getItem();
const item2 = await getItem();
})();
Run Code Online (Sandbox Code Playgroud)
问题是无法从传递给解析方法的类型推断出 Promise 的类型。solve 方法从传递给 Promise 构造函数的泛型类型获取其类型,而不是相反。在这种情况下,您也不需要使用return解析。
您可以通过以下两种方式之一解决此问题。
string作为泛型类型参数传递。使用Promise<string>((resolve) => { ...,这将告诉打字稿您希望将字符串传递给函数resolve。resolve如果您尝试使用其他内容进行调用,您将看到类型错误。Promise.resolve('a title');如果您实际上并不在等待任何内容,而只是想将字符串包装在 Promise 中。这样,就可以推断出泛型类型参数。