【问题标题】:"Object is possibly undefined" error even after check即使在检查后也出现“对象可能未定义”错误
【发布时间】:2019-05-13 09:58:11
【问题描述】:

访问length 属性时出现错误。我知道我可以通过只检索一次对象然后执行undefined-check 来解决问题。或者简单地添加一个!。但我想了解为什么会发生这种情况,并找出是否有更好的解决方案。这是人为的例子:

type MyMap<K extends string> = { [key in K]: string|undefined }

const getValueLength = (tmp:MyMap<string>, key:string) => {
  return tmp[key] !== undefined && tmp[key].length
}

我正在严格模式下运行 typescript 3.3。

Here is a similar question 问题是在另一个函数内部进行了检查,这不是这里的问题。

【问题讨论】:

    标签: typescript strict


    【解决方案1】:

    访问键被视为函数调用,它可能会改变您正在查看的对象/值,因此不能保证tmp[key] 的第一次和第二次调用会找到相同的东西。

    为避免这种情况,请确保只调用一次:

    type MyMap<K extends string> = { [key in K]: string | undefined };
    
    const getValueLength = (tmp: MyMap<string>, key: string) => {
      const str = tmp[key];
      return str !== undefined && str.length;
    };
    

    【讨论】:

    • 感谢您的回答。你知道我在哪里可以了解更多关于为什么对象属性访问被解释为函数调用的信息吗?我正在尝试更深入地了解这个问题。
    猜你喜欢
    • 2020-09-11
    • 2018-09-11
    • 2020-06-06
    • 2020-02-27
    • 1970-01-01
    • 2017-10-09
    • 2021-01-19
    • 1970-01-01
    相关资源
    最近更新 更多