Угловой 2 типа FormBuilder

Изучая Angular 2, я впервые увидел ngModel, а теперь увидел FormGroup/FormBuilder, который будет лучше создавать сложные формы. Но я заметил, что с FormBuilder мы теряем всю силу статического типа, предоставляемую TypeScript.

Все наблюдаемые и основной объект набираются как любые. Можно ли что-то сделать, чтобы этого избежать?

В связи с этим я увидел, что в TypeScript 2.1 есть "сопоставленные типы", которые, по моему мнению, были бы чем-то хорошим для преобразования стандартного интерфейса в интерфейс наблюдаемых без потери типов свойств, но я не вижу, чтобы об этом говорили Angular.

1 ответ

Формы угловые бывают двух видов

  1. управляемый шаблоном

а также

  1. реактивные формы (которые используют FormGroup/FormBuilder).

По моему мнению, реактивные формы хороши из-за возможности проверки и могут создавать динамические формы. эти две особенности делают реактивную форму более мощной.

реактивная форма ссылка Angular2 реактивная форма подтверждают равенство значений

и я думаю, что для наблюдаемых мы уже используем тип Observable <person[]> ;

для каждого объекта мы можем определить его интерфейс и использовать в компоненте.

но да, используя сопоставленные типы, мы получим больше опций, таких как readonly, прокси....

и никто не говорит о отображаемых типах, потому что это в TypeScript 2.1, но для нашего углового приложения мы используем "typescript": "~2.0.10" для поддержания стабильности нашего приложения.

Типы карт

Одна общая задача - взять существующий тип и сделать каждое из его свойств полностью необязательным. Допустим, у нас есть `Person:

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, но вместо создания новых элементов в списке они создают новые свойства в типе.

В дополнение к частичным Mapped Types могут выражать много полезных преобразований типов:

// 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 }
    };
Другие вопросы по тегам