【问题标题】:Typescript Partial<T> causing undefined error even with `?` chaining or conditional Checks即使使用 `?` 链接或条件检查,Typescript Partial<T> 也会导致未定义的错误
【发布时间】:2021-05-28 12:41:32
【问题描述】:

我有一个 mongoose 文档存储如下:

const currentGuildAlerts: Partial<mongoose.Document<IServerSchema> | null> = await Server.findOne(query).exec();

使用Partial&lt;T&gt;(因为我只从查询返回的IServerSchema 中获得一条路径),我知道Partial? 链接到界面中每个属性的末尾。但是我应该能够通过对值使用条件检查来解决它吗?

if(currentGuildAlerts) currentGuildAlerts.get("symbol_alerts").btc_alerts;

这仍然给我错误: Cannot invoke an object which is possibly 'undefined'.

我什至尝试过

currentGuildAlerts?.get("symbol_alerts").btc_alerts;

似乎仍然没有解决问题。我在这里做错了什么?

【问题讨论】:

    标签: typescript mongoose mongoose-schema typescript-generics typescript-utility


    【解决方案1】:

    Partial 表示对象的属性可能是undefined。您正在确保 currentGuildAlerts object 不是 null,但您尚未检查 property 是否存在。

    您还需要在get 之后使用可选链接?.,因为您已经说过Document 的所有属性都可能是undefined

    const currentGuildAlerts: Partial<mongoose.Document<IServerSchema>> | null = await Server.findOne(query).exec();
    
    const alerts = currentGuildAlerts?.get?.("symbol_alerts").btc_alerts;
    

    也许将Partial 移动到Document 中更有意义?

    const currentGuildAlerts: mongoose.Document<Partial<IServerSchema>> | null = await Server.findOne(query).exec();
    
    const alerts = currentGuildAlerts?.get("symbol_alerts").btc_alerts;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-25
      • 2014-06-26
      • 1970-01-01
      • 1970-01-01
      • 2011-07-27
      相关资源
      最近更新 更多