Когда использовать интерфейс и модель в 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 и привязать к интерфейсу / модели. Иногда мне нужен один объект данных, в другое время я хочу держать и массив объекта.



какой я должен использовать и почему?

523   4  

4 ответов:

интерфейсы только во время компиляции. Это позволяет только проверить, что ожидаемые полученные данные следуют определенной структуре. Для этого вы можете привести свой контент в этот интерфейс:

this.http.get('...')
    .map(res => <Product[]>res.json());

посмотреть эти вопросы:

Вы можете сделать что-то подобное с классом, но основные различия с классом заключаются в том, что они присутствуют во время выполнения (функция конструктора), и вы можете определить методы в них с обработкой. Но в этом случае вам нужно создать экземпляры объектов, чтобы иметь возможность их использовать:

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

    Ничего не найдено.