如何指示类型化表单组中的所有字段都不是可选的

Owe*_*vin 14 typescript angular angular14

从 Angular 14 开始,反应式表单默认是严格类型化的(类型化表单)。这很棒。我已经实现了一个简单的登录表单,如下所示

\n
  form = this.fb.group({\n    username: [\'\', [Validators.required]],\n    password: [\'\', [Validators.required]],\n    rememberMe: [true]\n  });\n  submit() {\n    this.authenticationService.login(this.form.value).subscribe();\n
Run Code Online (Sandbox Code Playgroud)\n

在我的服务中

\n
login(data: { username: string; password: string; rememberMe: boolean }): Observable<any> {\n  // Logic to login here\n}\n
Run Code Online (Sandbox Code Playgroud)\n

formTypescript 推断出的类型

\n
  form: FormGroup<{username: FormControl<string>, password: FormControl<string>, rememberMe: FormControl<boolean>}>\n
Run Code Online (Sandbox Code Playgroud)\n

看起来不错。问题是因为this.form.value它有一个 type Partial<{ username: string; password: string; rememberMe: boolean; }>。这会导致打字稿抛出错误

\n
Argument of type \'Partial<{ username: string; password: string; rememberMe: boolean; }>\' is not assignable to parameter of type \'{ username: string; password: string; rememberMe: boolean; }\'. \xc2\xa0\xc2\xa0Property \'username\' is optional in type \'Partial<{ username: string; password: string; rememberMe: boolean; }>\' but required in type \'{ username: string; password: string; rememberMe: boolean; }\'.\n
Run Code Online (Sandbox Code Playgroud)\n

有没有办法在声明表单组时指示该字段将在表单组值中可用。目前我正在打字如下

\n
Argument of type \'Partial<{ username: string; password: string; rememberMe: boolean; }>\' is not assignable to parameter of type \'{ username: string; password: string; rememberMe: boolean; }\'. \xc2\xa0\xc2\xa0Property \'username\' is optional in type \'Partial<{ username: string; password: string; rememberMe: boolean; }>\' but required in type \'{ username: string; password: string; rememberMe: boolean; }\'.\n
Run Code Online (Sandbox Code Playgroud)\n

上面的方法可行,但是是否必须对所有形式进行类型转换?

\n

小智 19

这是Partial因为某些控件可以被禁用(并且可能未定义)。

要获取所有值,请使用this.form.getRawValue().