Недавно я смотрел Учебник по 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 и привязать к интерфейсу / модели. Иногда я хочу один объект данных, в другой раз я хочу держать и массив объекта.
Какой из них я должен использовать и почему?
angular
typescript
I_LIKE_FOO
источник
источник
Ответы:
Интерфейсы только во время компиляции. Это позволяет только вам убедиться, что ожидаемые полученные данные соответствуют определенной структуре. Для этого вы можете привести свой контент к этому интерфейсу:
Смотрите эти вопросы:
Вы можете сделать что-то похожее с классом, но основные различия с классом заключаются в том, что они присутствуют во время выполнения (функция конструктора), и вы можете определять методы в них с обработкой. Но в этом случае вам нужно создать экземпляры объектов, чтобы иметь возможность их использовать:
источник
var data = res.json();
действительноvar data: any = res.json();
для компилятора, поэтому мы теряем все проверки типовdata
. Что полезнее было бы здесь было бы что - то вродеvar data: ProductDto[] = res.json();
сProductDto
тем интерфейсом , который моделирует структуру данных в возвращаемом JSON.Angular style guide says not to use interfaces.Always use classes.
см. Angular.io/guide/styleguide#style-03-03Интерфейс описывает либо контракт на класс или новый тип . Это чистый элемент Typescript, поэтому он не влияет на Javascript.
Модель, а именно класс , является реальной JS-функцией, которая используется для генерации новых объектов.
Выберите модель, в противном случае это будет JSON в вашем Javascript.
источник
Как сказал @ThierryTemplier, для получения данных с сервера, а также для передачи модели между компонентами (для сохранения списка intellisense и для ошибки времени проектирования) хорошо использовать интерфейс, но я думаю, что для отправки данных на сервер (DTO) лучше использовать класс для принятия Преимущества автокартирования DTO от модели.
источник
Используйте Class вместо Interface , это то, что я обнаружил после всех моих исследований.
Зачем? Один класс - это меньше кода, чем класс плюс интерфейс. (в любом случае вам может потребоваться класс для модели данных)
Зачем? Класс может действовать как интерфейс (использовать реализации вместо расширений).
Зачем? Интерфейсный класс может быть маркером поиска поставщика в внедрении зависимостей Angular.
из углового руководства по стилю
По сути, класс может делать все, что будет делать интерфейс. Поэтому, возможно, никогда не потребуется использовать интерфейс .
источник