Я пытаюсь определить свою структуру данных, чтобы инкапсулировать логику для работы с данными в одном классе. Затем у меня есть класс Field, в котором есть эта информация.
Field<T>(private name:string, private size:number, private comment:string) {
}
get Name():string {
return this.name;
}
get Size():number {
return this.size;
}
Создать ссылку на поле:
class User {
public FirstName:Field<string> = new Field<string>('FirstName', 20);
public LastName:Field<string> = new Field<string>('LastName', 32);
public Age:Field<number> = new Field<number>('Age', 3);
}
Вышеуказанное означает, что у меня есть поле данных «FirstName», которое представляет собой строку длиной не более 20 символов. LastName - это строка из 32 символов, а Age может содержать 3 цифры.
Я использую это, чтобы затем иметь возможность проверять мои данные в форме (например, используя Размер, чтобы ограничить число символов, которые можно ввести), а также при чтении из внешнего API.
Если я получаю данные из внешнего API, я также могу использовать поле «Размер», чтобы ограничить объем данных, которые я копирую в поле, чтобы обрезать данные.
Это позволяет моему слою интерфейса данных работать с классом типа данных, ожидая, что все поля будут Field<T>
, а затем позволяет мне использовать функции библиотеки для управления размером данных, добавления проверки данных в формы и т. Д., Без всегда нужно писать проверяющие функции в HTML, так как я могу использовать циклы в Angular и извлекать информацию из структуры данных.
Мой вопрос теперь заключается в том, как получить общий интерфейс для работы с данными, поступающими из списков и объектов в AngularFire.
Обычно при доступе к данным и структуре из AngularFire я могу использовать:
constructor(public afDb:AngularFireDatabase) {
...
this.afDb.object<IUser>('/user/1').valueChanges();
...
}
Это позволит получить данные и автоматически проанализировать их в интерфейсе IUser (не показан выше).
Я хочу иметь возможность генерировать интерфейс IUser из моего класса User, который имеет структуры данных в Field<T>
. По сути, я хочу создать интерфейс из класса User что-то вроде:
export interface IUser {
FirstName?:string;
LastName?:string;
Age?:number;
}
Тогда этот интерфейс можно было бы использовать при моем доступе к AngularFire. Другой вариант / вопрос заключается в том, как сделать эквивалент afDb.object<IUser>...
и оставить <IUser>
выключенным, но иметь возможность анализировать результаты объекта AngularFire в моей структуре данных, которая является классом User. Таким образом, разбор будет называть Field<T>.SetValue();
или что-то.