繁体   English   中英

按 Javascript 中的属性值排序对象时如何解决 Typescript“对象可能未定义”警告

[英]How to resolve Typescript “Object is possibly undefined” warning when sorting objects by property value in Javascript

我有一组对象,我按其中一个属性的值进行排序。 排序工作正常,但我收到 Typescript 警告“对象可能是‘未定义’”

如何检查名称上的未定义值以解决此警告?

myItems.sort((a, b) => (a.name > b.name  ? 1 : -1));

Typescript 告诉您代码中存在错误。 你的数组的类型显然是这样的:

({ name: string } | undefined)[]

这意味着当您遍历该数组时,您需要处理该项为undefined的情况,否则(undefined).name将引发运行时错误。


解决此问题的最简单方法可能是过滤您的数组,使其不再包含任何未定义的值:

interface MyItem { name: string }

const myItems: (MyItem | undefined)[] = [
  { name: 'c' },
  { name: 'b' },
  undefined,
  { name: 'a' },
]

myItems
  .filter((item): item is MyItem => !!item)
  .sort((a, b) => (a.name > b.name  ? 1 : -1));

这使用了一个过滤器 function ,它也是一个typeguard 运行后,返回的数组将是MyItem[]类型,然后您的排序可以在知道所有项目都有值的情况下正确运行。

操场

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM