Angular 14:布尔类型带默认值的Typed FormControls正确语法
Angular 14 中布尔类型 Typed FormControls 的正确语法
你遇到的报错是因为类型定义和校验器的约束不匹配导致的,以下是几种正确的写法:
1. 带必填校验的布尔类型 FormControl
如果需要使用Validators.required,类型要定义为boolean | null(因为required校验会排除null和undefined,但类型需要兼容FormControl的默认空值情况):
new FormControl<boolean | null>(true, Validators.required);
如果要用状态对象的写法(指定value或disabled),语法如下:
new FormControl<boolean | null>({ value: true, disabled: false }, Validators.required);
2. 允许值为 undefined 的布尔类型 FormControl
如果不需要必填校验,想让值支持undefined,可以这样写:
new FormControl<boolean | undefined>({ value: true }); // 或者显式传入空校验数组 new FormControl<boolean | undefined>({ value: true }, []);
报错原因解释
你原来的代码new FormControl<boolean | undefined>({ value: true }, Validators.required)之所以报错,是因为Validators.required会强制FormControl的值不能为null或undefined,但你定义的类型却包含了undefined,两者产生了类型冲突。而你能正常运行的字符串类型写法用了string | null,刚好和required的约束兼容,所以没有问题。
内容的提问来源于stack exchange,提问作者LeO
相关产品推荐
相关产品推荐

