【问题标题】:Property does not exists on type '{}' using Promises使用 Promises 的类型“{}”上不存在属性
【发布时间】:2018-04-16 19:48:50
【问题描述】:

我正在访问从已解决的承诺返回的对象的属性。

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 谈论使用接口,但我不确定如何将其应用于Promisethen() 函数

【问题讨论】:

    标签: typescript lambda promise anonymous-function


    【解决方案1】:

    Typescript 将无法通过resolve 的使用来判断Promise 的结果类型,您需要将结果类型显式指定为Promise 的泛型参数:

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

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

    编辑 我假设不是// Get result,而是一些更复杂的代码需要使用Promise 构造函数。如果您已经知道结果,您可以使用 @BenjaminGruenbaum 在 cmets 中指出的正确输入承诺的 Promse.resolve(result)

    【讨论】:

    • 或者直接致电Promse.resolve(result),TypeScript 很乐意为您服务。
    • @BenjaminGruenbaum 是的,是的,我假设//Get result 注释所在的代码更多,但我会添加简化版本:)
    猜你喜欢
    • 2021-01-09
    • 2021-07-10
    • 2020-01-29
    • 2018-03-29
    • 2017-07-22
    • 2023-03-26
    • 2023-04-02
    • 2019-12-20
    相关资源
    最近更新 更多