使用Promises在类型“{}”上不存在属性

时间:2018-04-16 09:52:46

标签: typescript lambda promise anonymous-function

我正在访问已解析的promise返回的对象的属性。

return new Promise((resolve) => {
    // Get result
    resolve(result)
}).then(r => console.log(r.id))

Typescript编译代码并且代码可以正常工作,但我的IDE抱怨r.id

  

[ts]属性'id'在类型'{}'上不存在。

处理此问题的'TypeScript'方法是什么? This question似乎有同样的问题,但我无法理解给定的解决方案。 This answer讨论了如何使用接口,但我不确定如何将其应用于then()的{​​{1}}函数

1 个答案:

答案 0 :(得分:4)

Typescript将无法通过Promise的使用来告知resolve的结果类型,您需要明确指定结果类型作为Promise的通用参数:< / p>

new Promise<{ id: string }>((resolve) => {
    // Get result
    resolve(result)
}).then(r => console.log(r.id))

您可以将{ id: string }替换为任何类型,因为奖励打字稿将检查是否使用正确的结果类型调用resolve

修改 我假设代替// Get result,有一些更复杂的代码需要使用Promise构造函数。如果您已经知道结果,那么您可以使用Promse.resolve(result)来正确输入承诺,因为@BenjaminGruenbaum在评论中指出