typescript - 检查后仍出现 "Object is possibly undefined"错误

标签 typescript strict

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

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问题是在另一个函数内部进行了检查,这不是这里的问题。

最佳答案

访问 key 被视为函数调用,这可能会改变您正在查看的对象/值,因此不能保证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;
};

关于typescript - 检查后仍出现 "Object is possibly undefined"错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56109971/

相关文章:

TypeScript 重载实现与签名不匹配

perl - 如何跳出 Perl 中的循环?

perl - 为什么在这个 Perl 示例中定义的 sdf 返回 true?

reactjs - React、Typescript、条件属性

javascript - 如何确定 javascript 迭代器是否提前终止?

javascript - 在 Promise 中包装 Auth0 的 parseHash 函数

javascript - Uncaught SyntaxError : In strict mode code, 函数只能在顶层或立即在另一个函数中声明

mysql - 一般错误 : 1364 Field 'xxxx' doesn't have a default value

JavaScript:严格模式和匿名函数

reactjs - 在 React 组件上使用 TypeScript 进行函数重载?