Angular 2声明一个对象数组

时间:2016-09-09 08:55:16

标签: arrays angular typescript

我有以下表达式:

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

这是行不通的,因为我的数组不是string类型而是包含对象列表。如何对数组进行delcare以包含对象列表?

*没有一个新的组件声明一个似乎浪费的句子类

7 个答案:

答案 0 :(得分:63)

我假设您正在使用打字稿。

为了格外谨慎,您可以将#!/usr/bin/env node var grunt = require('grunt'); console.log(" ********* Prepare code for shipment ********* "); grunt.tasks(['ship']);定义为需要匹配某个界面的对象数组:

type

或者没有定义自定义类型的短语法:

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 '},
];

答案 1 :(得分:16)

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

或者更确切地说......

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 '},
];

答案 2 :(得分:9)

如果您想存储来自外部API或数据库的数据,另一种特别有用的方法是:

  1. 创建一个代表您的数据模型的类

    export class Data{
        private id:number;
        private text: string;
    
        constructor(id,text) {
            this.id = id;
            this.text = text;
        }
    
  2. 在组件类中,您创建一个类型为Data的空数组,并在您从API或您正在使用的任何数据源获得响应时填充此数组

    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);
        }
      }
    }
    

答案 3 :(得分:3)

首先,生成界面

假设您正在使用TypeScript&amp; Angular CLI,您可以使用以下命令生成一个

ng g interface car

之后设置其属性的数据类型

// car.interface.ts
export interface car {
  id: number;
  eco: boolean;
  wheels: number;
  name: string;
}

您现在可以在所需的类中导入您的界面。

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

通过推送数组中的项目来更新汽车对象的集合/数组。

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

有关接口的更多信息:

  

接口是TypeScript工件,它不是ECMAScript的一部分。接口是一种根据参数及其类型定义函数契约的方法。除了函数之外,接口也可以与Class一起使用以定义自定义类型。   接口是一种抽象类型,它不像类那样包含任何代码。它仅定义API的“签名”或形状。在转换过程中,接口不会生成任何代码,它仅在开发期间由Typescript用于类型检查。 - https://angular-2-training-book.rangle.io/handout/features/interfaces.html

答案 4 :(得分:2)

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

OR

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

答案 5 :(得分:0)

数据类型:array_name:datatype[]=[]; 字符串示例:users:string[]=[];

对于对象数组:

对象类型:object_name:objecttype[]=[{}]; 用户示例:Users:user[]=[{}];

如果在某些情况下绑定中未定义它,请确保在Oninit()上对其进行初始化。

答案 6 :(得分:0)

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

const arr: NumberArray = [
    {id: 0, text: 'Number 0'},
    {id: 1, text: 'Number 1'},
    {id: 2, text: 'Number 2'},
    {id: 3, text: 'Number 3 '},
    {id: 4, text: 'Number 4 '},
    {id: 5, text: 'Number 5 '},
];