Typescript Array find inside Array some

xqkwcwgp  于 2023-10-22  发布在  TypeScript
关注(0)|答案(2)|浏览(122)

使用下面的代码,我得到了一个错误,它告诉我对象可能是未定义的,但是如果Array.some测试通过,那么find应该是定义的,对吗?
我错过了什么?
代码:

if (attributes.some((a) => a.key === "my_key")) {
  my_key = checkout.attributes.find(
    (a) => a.key === "my_key"
  ).value;
}

我试着挖掘 typescript 文档,但我没有找到任何相关的信息。

k4ymrczo

k4ymrczo1#

find调用不知道周围条件的含义。如果你想自己进行Assert,你可以使用as关键字。

// assuming `attributes` is of some array `YourAttributeType[]`
if (attributes.some((a) => a.key === "my_key")) {
  my_key = checkout.attributes.find(
    (a) => a.key === "my_key"
  )?.value as YourAttributeType;
}

我建议不要用somefind迭代数组两次,只需调用find一次,然后自己处理一个空结果:

const entry = checkout.attributes.find(a => a.key === "my_key");
if (entry === undefined) return; // or throw, or set some default value etc.
// typescript should infer `entry` as a `YourAttributeType` at this point
const my_key = entry.value
yrwegjxp

yrwegjxp2#

Find可能返回undefined https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/find
所以这基本上是 typescript 是有帮助的。
如果你不介意my_key可能被设置为undefined,你可以这样做:

if (attributes.some((a) => a.key === "my_key")) {
  my_key = checkout.attributes.find(
    (a) => a.key === "my_key"
  )?.value;
}

相关问题