typescript 即使在验证时也可能返回null

dxxyhpgq  于 2023-05-19  发布在  TypeScript
关注(0)|答案(1)|浏览(162)

我有以下代码:

export function validaterUserContributors(
  propList: FormPropList<IdentityUserDto>
) {
  const firstNameNode = propList.dropByValue(
    'AbpIdentity::DisplayName:Name',
    (prop, displayName) => prop.displayName === displayName
  );

  const emailControlValue = firstNameNode?.value;

  if (emailControlValue) {
    const emailControl = new FormControl(
      emailControlValue,
      Validators.required
    );

    propList.add(emailControl.value);

}

正如您所看到的,我为删除的第一个表单控件创建了一个新的表单控件,并添加了一个验证器,因此我想在最后一行propList.add(emailControl.value);中添加它
但这给我带来了以下错误:
“FormProp”类型的参数|“null”不能分配给“FormProp”类型的参数。类型“null”不能分配给类型“FormProp”
我不知道为什么如果我使用if语句来控制if (emailControlValue) {},它可能为null
知道我哪里做错了吗

2uluyalo

2uluyalo1#

问题似乎是在访问firstNameNodevalue属性时使用可选链接运算符(?)的方式
即使在创建新的FormControl之前检查emailControlValue是否正确,TypeScript仍然会识别出firstNameNode可能是nullundefined,因为使用了?
要解决此问题,您可以删除?并使用非空Assert运算符(!),如下所示:

const emailControlValue = firstNameNode!.value;

或者,你可以使用一个nullish合并运算符(??)来提供一个默认值,以防firstNameNode为null或undefined:

const emailControlValue = firstNameNode?.value ?? '';

相关问题