Как инициализировать массив <T>в машинописном / угловом? - PullRequest
0 голосов
/ 11 ноября 2019

У меня есть приложение Angular 8.

Ниже приведена одна из моих моделей в машинописном тексте.

export class Movie
{
  title:string;
  tickets: Array<Ticket>;
}

export class Ticket
{
   name:string;
   price:number;
}

В одном из компонентов (фильм), когда я получаю доступ к объекту movie, tickets не инициализируется.

movie.component.ts

export class MovieComponent
{
  movieObj:Movie;

  constructor()
  {
    this.movieObj = new Movie();
    console.log(this.movieObj); // outputs title value but not tickets
   //console.log(this.movieObj.tickets[0].name); //undefined 
  }
}

При проверке типа массива в TypeScript это интерфейс. (Мы не можем создать объект интерфейса)

Как инициализировать массив в машинописи / угловые?

Спасибо!

Ответы [ 3 ]

0 голосов
/ 11 ноября 2019

Вы можете сделать что-то вроде этого.

export class Movie
{
  title:string = 'Movie';
  tickets: Ticket[] = [];
}
export class Ticket
{
   name:string;
   price:number;
}
0 голосов
/ 11 ноября 2019

Если вы хотите использовать логику при создании заявок, вы должны использовать constructor из Movie класса.

Вы можете инициализировать свойство с пустым массивом заявок, используя:

export class Movie
{
  title:string;
  tickets: Ticket[] = [];
}

Неважно, используя Ticket[] (сокращенный синтаксис) или Array<Ticket> (общий синтаксис). Нет никакой семантической разницы, и они полностью эквивалентны.

0 голосов
/ 11 ноября 2019

Вы можете initialize это в самом классе.

export class Movie
{
  title:string = 'Movie';
  tickets: Array<Ticket> = [{name: 'Ticket', price: 300}];
}

Демонстрация Stackblitz

...