Как объявить массив объектов - PullRequest
0 голосов
/ 02 октября 2019

Я изучаю Angular и Typescript, я занимался небольшим программированием, но я достиг вершины, я нигде не могу найти решение своей проблемы.

Мне удалось успешно объявить простые типы и массив простых типов, но я не могу создать массив объектов.

someArray = new Array<ObjectType>();
class ObjectType {
    constructor( name: string, age: number) {
    }
}

и затем я пытаюсь добавить элемент в массив

someArray.push(new ObjectType('John',5) ); 

и получаю сообщение об ошибке:

Дублирующий идентификатор 'someArray'.ts (2300)
Последующие объявления свойств должны иметь одинаковый тип. Свойство someArray должно иметь тип ObjectType [], но здесь имеет тип any.ts (2717)
app.component.ts (10, 3): здесь также был объявлен someArray.

Как это может быть дубликатом? Заранее спасибо.


import { Component } from '@angular/core';

@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.css']
})
export class AppComponent {

  someArray = new Array<ObjectType>();
  someArray.push(new ObjectType('John',5) );
}

class ObjectType{
    constructor( name: string, age: number){
    }
}

1 Ответ

2 голосов
/ 03 октября 2019

Ваш синтаксис неверен. В прямом теле типа (класса) вы можете определить содержащие типы / поля / методы. В теле конструктора / методов вы можете написать процедурный код, который вы хотите выполнить. В угловом компоненте рекомендуется всегда реализовывать интерфейс OnInit, а затем писать код, который вы хотите выполнить при загрузке компонента. ngOnInit выполняется до загрузки шаблона.

import { Component, OnInit } from '@angular/core';

@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.css']
})
export class AppComponent implements OnInit {

  someArray = new Array<ObjectType>();

  ngOnInit() {
    this.someArray.push(new ObjectType('John',5) );
  }
}

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

class ObjectType{
    constructor(public name: string, public age: number) {
    }
}

Вы также можете добавить readonly, если не хотите, чтобы значение былоизменилось после того, как было установлено.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...