在数组中查找对象时,Typescript 对象可能未定义

时间:2021-08-01 17:06:46

标签: javascript reactjs typescript

当您将值赋予变量并且该值可能未定义时,Typescript 会出错。这通常可以通过在您传递的值之后插入 stag-deployment.yaml 或使用简单的 ! 语句来解决。问题是第一个对我不起作用,使用后者会导致我在代码中添加不必要的额外行。场景如下:

我有这个界面。我使用它的数组作为我的组件状态:

if

后来我想让 interface IFormFields { name: string; isValid: boolean; content: string; isUnchanged: boolean; tip: string } ... const [requiredFields, setRequiredFields] = useState<Array<IFormFields>>([]); 对象使用它们的值。我想通过在单行中使用 JavaScript 的 requiredFields 方法来实现:

find

这一行会导致错误,因为“字段”可能未定义。在这种情况下,K 运算符会导致另一个错误

requiredFields.find(field => field.name === "Nome")

并且使用 requiredFields.find(field! => field.name === "Nome") //"Cannot find name 'field'.ts(2304)" 子句会像我说的那样导致大量不必要的代码行,因为 if 可以在其中包含 n 个对象。有什么解决方法吗?

1 个答案:

答案 0 :(得分:2)

如果您想使用 ! 运算符,您需要在访问其属性的地方这样做,即

requiredFields.find(field => field!.name === "Nome")

但是,我建议您改用 ? 运算符;这样,如果 field does 碰巧未定义,您将不会收到运行时错误:

requiredFields.find(field => field?.name === "Nome")

简而言之,field!.name 只是告诉编译器您知道 field 已定义,而 field?.name 会自动为您放入 null/undefined 检查(从而避免代码混乱)。