当您将值赋予变量并且该值可能未定义时,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 个对象。有什么解决方法吗?
答案 0 :(得分:2)
如果您想使用 !
运算符,您需要在访问其属性的地方这样做,即
requiredFields.find(field => field!.name === "Nome")
但是,我建议您改用 ?
运算符;这样,如果 field
does 碰巧未定义,您将不会收到运行时错误:
requiredFields.find(field => field?.name === "Nome")
简而言之,field!.name
只是告诉编译器您知道 field
已定义,而 field?.name
会自动为您放入 null
/undefined
检查(从而避免代码混乱)。