Когда использовать интерфейс и модель в TypeScript / Angular2
недавно я смотрел учебник по Angular 2 с TypeScript, но не уверен, когда использовать интерфейс и когда использовать модель для хранения структур данных.
пример интерфейса:
export interface IProduct {
ProductNumber: number;
ProductName: string;
ProductDescription: string;
}
пример модели:
export class Product {
constructor(
public ProductNumber: number,
public ProductName: string,
public ProductDescription: string
){}
}
Я хочу загрузить данные JSON из URL и привязать к интерфейсу / модели. Иногда мне нужен один объект данных, в другое время я хочу держать и массив объекта.
какой я должен использовать и почему?
4 ответов:
интерфейсы только во время компиляции. Это позволяет только проверить, что ожидаемые полученные данные следуют определенной структуре. Для этого вы можете привести свой контент в этот интерфейс:
this.http.get('...') .map(res => <Product[]>res.json());посмотреть эти вопросы:
- как я могу привести объект JSON к классу typescript
- как получить объект даты из ответа json в typescript
Вы можете сделать что-то подобное с классом, но основные различия с классом заключаются в том, что они присутствуют во время выполнения (функция конструктора), и вы можете определить методы в них с обработкой. Но в этом случае вам нужно создать экземпляры объектов, чтобы иметь возможность их использовать:
this.http.get('...') .map(res => { var data = res.json(); return data.map(d => { return new Product(d.productNumber, d.productName, d.productDescription); }); });
The интерфейс описывает либо контракт для класс или новый тип. Это чистый элемент Typescript, поэтому он не влияет на Javascript.
модель, а именно класс, это актуальная функция JS, которая используется для создания новых объектов.
Я хочу загрузить данные JSON из URL и привязать к интерфейсу / модели.
перейти на модель, в противном случае он все равно будет JSON в вашем Javascript.
Как @ThierryTemplier сказал, что для получения данных от сервера, а также передачи между компонентами модели (чтобы сохранить список IntelliSense и сделать дизайн Ошибка времени), это прекрасно, чтобы использовать интерфейс, но я думаю, что для отправки данных на сервер (объекты переноса данных) лучше использовать класс, чтобы воспользоваться преимуществами автоматического сопоставления ДТО от модели.
использовать класс вместо интерфейса вот что я обнаружил после всех моих исследований.
Почему? Один только класс-это меньше кода, чем class-plus-interface. (в любом случае вам может потребоваться класс для модели данных)
Почему? Класс может выступать в качестве интерфейса (использовать реализации вместо расширения).
Почему? Класс интерфейса может быть маркером поиска поставщика при внедрении угловой зависимости.
в основном класс может делать все, что интерфейс будет делать. Так что, возможно, никогда не придется использовать интерфейс.
Comments