Angular 2 a declarar um conjunto de objectos

tenho a seguinte expressão:

public mySentences:Array<string> = [
    {id: 1, text: 'Sentence 1'},
    {id: 2, text: 'Sentence 2'},
    {id: 3, text: 'Sentence 3'},
    {id: 4, text: 'Sentenc4 '},
];

que não funciona porque a minha matriz não é do tipo string, contém uma lista de objectos. Como posso delcare minha matriz para conter uma lista de objetos?

* sem um novo componente que declare a classe a Para sentença que parece um desperdício

Author: Roberto Russo, 2016-09-09

4 answers

Presumo que estejas a usar um escrito.

Para ser mais cauteloso, pode definir o seu type como um conjunto de objectos que precisam de corresponder a uma determinada interface:

type MyArrayType = Array<{id: number, text: string}>;

const arr: MyArrayType = [
    {id: 1, text: 'Sentence 1'},
    {id: 2, text: 'Sentence 2'},
    {id: 3, text: 'Sentence 3'},
    {id: 4, text: 'Sentenc4 '},
];

Ou sintaxe curta sem definir um tipo personalizado:

const arr: Array<{id: number, text: string}> = [...];
 45
Author: martin, 2018-04-03 10:47:49
public mySentences:Array<Object> = [
    {id: 1, text: 'Sentence 1'},
    {id: 2, text: 'Sentence 2'},
    {id: 3, text: 'Sentence 3'},
    {id: 4, text: 'Sentenc4 '},
];
Ou melhor...
export interface type{
    id:number;
    text:string;
}

public mySentences:type[] = [
    {id: 1, text: 'Sentence 1'},
    {id: 2, text: 'Sentence 2'},
    {id: 3, text: 'Sentence 3'},
    {id: 4, text: 'Sentenc4 '},
];
 13
Author: micronyks, 2017-01-13 00:37:44

Outra abordagem que é especialmente útil se quiser armazenar dados provenientes de uma API externa ou de um DB seria esta:

  1. Crie uma classe que represente o seu modelo de dados

    export class Data{
        private id:number;
        private text: string;
    
        constructor(id,text) {
            this.id = id;
            this.text = text;
        }
    
  2. Na sua classe de componentes, cria um array vazio do tipo Data e preenche este array sempre que obtém uma resposta da API ou de qualquer fonte de dados que esteja a utilizar

    export class AppComponent {
        private search_key: string;
        private dataList: Data[] = [];
    
        getWikiData() {
           this.httpService.getDataFromAPI()
            .subscribe(data => {
              this.parseData(data);
            });
         }
    
        parseData(jsonData: string) {
        //considering you get your data in json arrays
        for (let i = 0; i < jsonData[1].length; i++) {
             const data = new WikiData(jsonData[1][i], jsonData[2][i]);
             this.wikiData.push(data);
        }
      }
    }
    
 7
Author: Ezio, 2017-07-19 17:41:14

Primeiro, gerar uma Interface

Assumindo que estás a usar Tipescript & CLI Angular Você pode gerar um usando o seguinte comando

ng g interface car

Depois disso definir os tipos de propriedades

// car.interface.ts
export interface car {
  id: number;
  eco: boolean;
  wheels: number;
  name: string;
}
Pode agora importar a sua interface na classe que quiser.

import {car} from "app/interfaces/car.interface";

E actualizar a colecção/lista de objectos do carro, empurrando os itens para a lista.

this.car.push({
  id: 12345,
  eco: true,
  wheels: 4,
  name: 'Tesla Model S',
});

Mais nas interfaces:

Interface é um artefato Tipográfico, não faz parte do ECMAScript. Uma interface é uma forma de definir um contrato sobre uma função em relação aos argumentos e seu tipo. Junto com funções, uma interface também pode ser usada com uma classe, bem como para definir tipos personalizados. Uma interface é um tipo abstrato, não contém nenhum código como uma classe. Define apenas a "assinatura" ou a forma de uma API. Durante a transpilação, uma interface não irá gerar nenhum código, é apenas usado por Typescript para verificação do tipo durante o desenvolvimento. - https://angular-2-training-book.rangle.io/handout/features/interfaces.html

 2
Author: 0x1ad2, 2017-03-06 10:46:59