学习角2,我第一次看到了ngModel,现在看到了FormGroup/FormBuilder,这将更好地制作复杂的表单。但是我注意到,对于FormBuilder,我们失去了TypeScript给出的所有静态类型的功率。
所有可观测值和主对象都被键入为任意类型。有什么可以避免的吗?
在这方面,我看到TypeScript 2.1有“映射类型”,在我看来,在一个可观察的接口中转换一个标准接口,而不会失去属性类型,这将是件好事,但我看到没有人从角度上谈论这个问题。
发布于 2016-12-21 01:15:19
角的形式有两种
和
我认为,由于自定义验证选项,反应性表单是很好的,并且可以创建动态表单。这两个特点使反应形式更加强大。
反应性表单链接Angular2 reactive form confirm equality of values
我认为对于可观测数据我们已经使用了Observable <person[]> ;类型
对于每个对象,我们可以定义它的接口并在组件中使用。
但是的,使用映射类型,我们将得到更多的选项,如只读,代理.
节点体讨论映射类型是因为它在TypeScript 2.1中,但是对于我们的角度应用程序,我们使用"typescript": "~2.0.10"来保持应用程序的稳定。
映射类型
一个常见的任务是接受现有类型并使其每个属性都是可选的。假设我们有一个‘人:
interface Person {
name: string;
age: number;
location: string;
}它的部分版本如下:
interface PartialPerson {
name?: string;
age?: number;
location?: string;
}使用映射的类型,可以将PartialPerson编写为类型Person的广义转换,如下所示:
type Partial<T> = {
[P in keyof T]?: T[P];
};
type PartialPerson = Partial<Person>;映射类型是通过接受文字类型的联合并为新的对象类型计算一组属性来产生的。它们就像Python中的列表理解,但它们不是在列表中生成新元素,而是以一种类型生成新的属性。
除了部分类型之外,映射类型还可以表示对类型的许多有用的转换:
// 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 }
};https://stackoverflow.com/questions/41253031
复制相似问题