Создание объектов с использованием интерфейса class vs в Typescript (Angular 5) vs Java и C#

Я хочу понять, используя интерфейс vs class для создания модели в angular 2. Когда мы создаем модель на Java или C#, мы используем классы моделей для представления модели данных, которые передаются в нашем приложении и поэтому строго типизированы.

//C#
public class Movie 
{
   public int ID { get; set; }
   public string Title { get; set; }
   public DateTime ReleaseDate { get; set; }
   public string Genre { get; set; }
   public decimal Price { get; set; }
}

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

Я вижу примеры и учебники, использующие такие же подходы, как это.

//Java
public class Movie
{
   public int ID;
   public String Title;
   public Date ReleaseDate;
   public String Genre;
   public float Price;
}

затем я начинаю использовать angular и typescript для веб-разработки. Я считаю, что некоторые любят использовать интерфейс для представления своей модели, а другие любят придерживаться класса.

//Class
export class Movie {
    public string id;
    public string title;
    public Date ReleaseDate;
    public string Genre;
    public number
}
//Interface
export interface Movie {
    public string id;
    public string title;
    public Date ReleaseDate;
    public string Genre;
    public number
}

однако, когда дело доходит до создания и использования модели, она выглядит так же, как и для меня.

 //declare
let movie = new Movie();
movie: Movie = new Movie();
movies: Movie[];
amovie: Movie;
//reactive
obsMovies: Observable<Movie[]>;
obsAMovie: Observable<Movie>;

Я хочу знать разницу, если она есть при использовании интерфейса или класса в typescript. Мое понимание интерфейса-это просто контракт для классов, которые разделяют функции, тогда как класс может быть чем угодно воображать.

1 ответов


классы в Typescript больше похожи на ваши классы в Java и C#. Они фактически компилируются в прототипы JavaScript.

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

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