代码之家  ›  专栏  ›  技术社区  ›  Nino Filiu

使用可选链接时,类型“object”上不存在属性

  •  0
  • Nino Filiu  · 技术社区  · 4 年前

    不可能 this code 失败

    const fn = (obj: object) => obj?.prop;
    

    但是TypeScript编译器阻止我写它,解释说

    类型“object”上不存在属性“prop”

    但这正是可选链接的用途:如果属性存在,我访问它,否则我访问未定义的,它适用于任何 object 。那么为什么TS不让我写这篇文章呢?我的 tsconfig.json 我可以设置,这样我就可以写了?

    0 回复  |  直到 4 年前
        1
  •  1
  •   Connor Low Porkopek    4 年前

    从…起 Mozilla :

    可选的链接运算符(?.)使您能够读取位于连接对象链深处的属性的值,而无需检查链中的每个引用是否有效。

    在您的情况下, obj 正在检查引用吗 null undefined , prop .


    为什么TS不让我写这个

    你已经告诉TS期待 object ,但您没有告诉TS任何关于该对象属性的信息,因此它不知道 道具 存在。换句话说, 道具 不在的接口上 对象 ,所以它抛出了一个编译器错误。


    在我的tsconfig.json中有一个我可以设置的设置吗?

    上面的行为就是静态类型检查器TypeScript的全部要点。 您不希望启用此确切行为 ,但在语言中有一种有意产生相同效果的方式:

    const fn2 = (obj: Record<string, any>) => obj.prop;
    

    上述代码要求 obj 非null/未定义,并允许任何 string number ,但不是 Symbol )属性访问器。

    Playground

    推荐文章