Angular小博客

分享让你更聪明

[译2022]键入的表单:RFC 在这里

浏览:1次 日期:2024年10月20日 21:34:12 作者:admin

五年来,Forms 包中的强类型一直是首要的功能需求。 Issue (#13721)是 Angular 存储库上有史以来最受欢迎的问题。多年来,许多贡献者都尝试实施它。

我们很自豪地宣布键入表单征求意见。这是向 Angular 添加这一期待已久的功能迈出的第一步。

漫长的旅程,棘手的问题

使用强类型,可以更安全地访问表单控件、组和数组内部的值。许多用户在第一次与 Forms 交互时访问控件类型,并想知道为什么它的值为any :

const control = new FormControl(1234);
const value = control.value; // type `any`

这只是冰山一角:Forms API 非常大,并且有许多表面同样是非类型化的。

此外,API 本身也带来了许多挑战,RFC 中对此进行了深入探讨。这些挑战包括如何reset控件、部分FormGroup值、 disabled控件等等的详细信息。

尽管完整的细节在 RFC 中,但探索最棘手的部分之一会带来一些乐趣:重置控件。 Forms 包当前的行为方式非常不安全:控件重置为null ,这可能会违反预期的值类型。例如, FormControl<string>可能旨在具有字符串值,但调用reset将导致其变为null ,从而违反了该类型约定。为了解决这个特定问题,我们在构造FormControl时引入了一个名为initialValueIsDefault的新选项。设置此标志会导致控件重置为其初始值,而不是null 。

这只是一个例子,许多其他冰山潜伏在表面之下。我们如何以向后兼容的方式输入这些内容?我们研究了这些问题,并在 RFC 中收集了我们提出的修复方案。

RFC 中有什么内容?

RFC 同时服务于几个目的。

首先,它收集我们关于关键设计问题的建议。 RFC 以简洁易懂的方式呈现每个设计点并附有解释和示例。

其次,它提供了一个工作原型。我们希望您尝试我们的原型,尤其是使用您自己的应用程序,并让我们知道它的进展情况。这是您在审核 RFC 时可以帮助我们的最重要方法之一。

最后,我们很乐意收集有关该提案的反馈。我们提出了一些特别有趣的问题,但不要觉得仅限于这些主题。

未来之路

类型化表单本身提供了宝贵的好处,但该功能还将使我们能够以其他方式改进表单包。

下一步是改进模板类型检查。现在我们可以在 TypeScript 中检查表单类的类型,我们也希望将这些改进引入表单模板中。这将需要升级模板类型检查器,并且应该很好地扩大新类型的影响。

还有一些其他潜在的受益者:我们很乐意清理状态更改事件的处理方式。拥有强类型将使我们能够在任何地方提供一致且正确的体验,从ControlValueAccessorAbstractControl上的可观察量。

我们对表单的这一新方向感到非常兴奋,无论是类型本身还是即将到来的许多改进。

原文链接:https://blog.angular.dev/typed-forms-the-rfc-is-here-53263e792c89