首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >角2 FormBuilder型

角2 FormBuilder型
EN

Stack Overflow用户
提问于 2016-12-20 23:47:52
回答 1查看 2.9K关注 0票数 3

学习角2,我第一次看到了ngModel,现在看到了FormGroup/FormBuilder,这将更好地制作复杂的表单。但是我注意到,对于FormBuilder,我们失去了TypeScript给出的所有静态类型的功率。

所有可观测值和主对象都被键入为任意类型。有什么可以避免的吗?

在这方面,我看到TypeScript 2.1有“映射类型”,在我看来,在一个可观察的接口中转换一个标准接口,而不会失去属性类型,这将是件好事,但我看到没有人从角度上谈论这个问题。

EN

回答 1

Stack Overflow用户

发布于 2016-12-21 01:15:19

角的形式有两种

  1. 模板驱动

  1. 反应性表单(使用FormGroup/FormBuilder )。

我认为,由于自定义验证选项,反应性表单是很好的,并且可以创建动态表单。这两个特点使反应形式更加强大。

反应性表单链接Angular2 reactive form confirm equality of values

我认为对于可观测数据我们已经使用了Observable <person[]> ;类型

对于每个对象,我们可以定义它的接口并在组件中使用。

但是的,使用映射类型,我们将得到更多的选项,如只读,代理.

节点体讨论映射类型是因为它在TypeScript 2.1中,但是对于我们的角度应用程序,我们使用"typescript": "~2.0.10"来保持应用程序的稳定。

映射类型

一个常见的任务是接受现有类型并使其每个属性都是可选的。假设我们有一个‘人:

代码语言:javascript
复制
interface Person {
    name: string;
    age: number;
    location: string;
}

它的部分版本如下:

代码语言:javascript
复制
interface PartialPerson {
    name?: string;
    age?: number;
    location?: string;
}

使用映射的类型,可以将PartialPerson编写为类型Person的广义转换,如下所示:

代码语言:javascript
复制
type Partial<T> = {
    [P in keyof T]?: T[P];
};

type PartialPerson = Partial<Person>;

映射类型是通过接受文字类型的联合并为新的对象类型计算一组属性来产生的。它们就像Python中的列表理解,但它们不是在列表中生成新元素,而是以一种类型生成新的属性。

除了部分类型之外,映射类型还可以表示对类型的许多有用的转换:

代码语言:javascript
复制
// Keep types the same, but make each property to be read-only.

    type Readonly<T> = {
        readonly [P in keyof T]: T[P];
    };

// Same property names, but make the value a promise instead of a concrete one

    type Deferred<T> = {
        [P in keyof T]: Promise<T[P]>;
    };

// Wrap proxies around properties of T

    type Proxify<T> = {
        [P in keyof T]: { get(): T[P]; set(v: T[P]): void }
    };
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41253031

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档