Как получить длину из модели массива в Typescript - PullRequest
0 голосов
/ 17 июня 2019

Я пытаюсь получить длину из интерфейса Array.Но получаю ошибку как:

error TS2339: Property 'length' does not exist on type 'ModelSubSystems'. В этом случае как получить длину.вот мой код TS:

@Input() subsystems: ModelSubSystems;

resolve({ data: this.subsystems, totalCount: this.subsystems.length }); //error

вот мои интерфейсы:

export interface ModelSubSystem {
    Id: number;
    Name: string;
    CreatedBy: string;
    CreatedDate: Date;
    UpdatedBy: string;
    UpdatedDate: Date;
}

export interface ModelSubSystems {
    subsystems: Array<ModelSubSystem>; //this is array!!
}

любой поможет мне с правильным подходом.Заранее спасибо.

Ответы [ 2 ]

2 голосов
/ 17 июня 2019

@Input() subsystems: ModelSubSystems эта входная переменная не будет иметь длину, потому что это interface с одним свойством, имя которого также subsystems и является массивом (из которого вы пытаетесь получить длину).

Свойство массива, созданное в интерфейсе, можно получить с помощью this.subsystems.subsystems, в то время как первый subsystem здесь - это ввод типа systemsystem, а вторым является массив в этом интерфейсе.

Если вы хотите, чтобы вход subsystems был массивом ModelSubSystem, вместо создания интерфейса ModelSubSystems, прямо объявите этот вход как и массив, чтобы вы могли получить доступ к его длине:

@Input() subsystems: Array<ModelSubSystem>
1 голос
/ 17 июня 2019

Вы уверены, что переменная this.subsystems инициализируется, а не только объявлена?

Переменные интерфейса Typescript по умолчанию undefined, поэтому вам придется установить их, прежде чем их можно будет использовать / их методы могут быть вызваны.

РЕДАКТИРОВАТЬ: как указал Джефф Боуман, чтовам на самом деле нужно this.subsystems.subsystems.length.

Вы также можете добавить свойство length к интерфейсу и заставить класс реализовать желаемое поведение:

export interface IModelSubSystems {
  subsystems : Array<ModelSubSystem>;
  length : number;
}

export class ModelSubSystems implements IModelSubSystems {
  subsystems = new Array<ModelSubSystem>();
  get length() : number {
    return this.subsystems.length;
  }
}
...