接口类型的数组

时间:2018-08-03 08:29:31

标签: javascript angular typescript mean-stack

我的界面如下:

export interface testInterface
{

    value1: string;
    value2:string[];
    SubValue:[{}]

}

,我要填充一个 testInterface 类型的数组,该数组绑定到一个下拉列表。一切正常。我希望下拉列表将“ Pick One”作为第一个对象。所以我做了以下事情:

default:testInterface[]=[] //==> since the bind array needs to be an array.

this.default.value1="----Please Select the Sub-Industry---";
this.default.value2=[];
this.default.SubValue=[];

我在 subValue 的行上收到此错误:  类型'undefined []'不能分配给类型'[{value1:string; value2:字符串[];值3 ...'。   类型'undefined []'中缺少属性'0'。

为什么我不能说dropdownArray [0] .push = this.default ???

有人可以解释一下为什么吗?对于某些人来说,这个问题听起来很明显,但是我是新手!

密码:

//how I fille the binded array:

 subsDataofSelectedSector:ISubIndustry[]=[];

        if (response.SubIndustries.length > 0) {
          for (i = 0; i < response.SubIndustries.length; i++) {
            this.subsDataofSelectedSector.push(response.SubIndustries[i]);
          }
        }
        
//the interface

export interface ISubIndustry
{

    IndustrySector: string;
    isSelected: string;
    dataSubjectCategories:string[];
    dataTypeCategories:string[];
    SubIndustries:[{}]

}

//the default array

this.defaultSub.dataSubjectCategories =[];
this.defaultSub.dataTypeCategories=[];
this.defaultSub.IndustrySector="----Please Select the Sub-Industry---";
this.defaultSub.SubIndustries=[];
this.defaultSub.isSelected="true";

// i would like to to do the following and add the rest after index 0

 this.subsDataofSelectedSector[0].push(this.defaultSub)

这是我必须注入数组的JSON文件的一部分。

{
    "IndustrySector":"Other Services Activities",
    "isSelected": "false",
    "dataSubjectCategories":["DS.Employees","DS.Collaborators","DS.Legal Person","DS.Natural Person"],
    "dataTypeCategories":["Personal Data"],
    "SubIndustries": [
      {
        "IndustrySector":"Activities of Membership Organisations",
        "isSelected": "false",
        "dataSubjectCategories":[],
        "dataTypeCategories":[],
        "SubIndustries": [
          {
            "IndustrySector":"Activities of Other Membership Organisations",
            "isSelected": "false",
            "dataSubjectCategories":[],
            "dataTypeCategories":[],
            "SubIndustries":[
              {

如您所见

,一个可以有一些子值,每个子也可以有子。所以我将其定义为对象数组

2 个答案:

答案 0 :(得分:0)

因为要插入对象,而不是数组。

此外SubValue是对象数组,而不是this.default.SubValue = [];

数组
this.default.SubValue.push({});

创建接口时,其属性必须匹配。

换句话说,如果您的情况是这样(只要需要所有属性,就可以通过“问号”使它们成为可选属性)

因此,初始化默认对象时,其所有属性必须与接口(例如)匹配

default.push({
  value1 = "----Please Select the Sub-Industry---",
  value2 = [],
  SubValue = [{}]
})

或设置可选属性并按您的方式使用

export interface testInterface
{

    value1: string;
    value2?:string[];
    SubValue?:[{}]

}

总结起来...在您的情况下,问题出在这一行this.default.value1

  1. 默认值必须是一个值
  2. 其属性必须与接口中的定义相匹配

答案 1 :(得分:0)

default.SubValue是Object的数组类型,即[Object,Object,Object ...],并且您将undefined的数组分配给值,即[undefined,undefined],因此typescript给出了两种类型的错误不一样。您必须指定它属于对象类型才能清除此错误。

this.default.value1 =“ ----请选择子行业---”;

this.default.value2 = [];

this.default.SubValue = [{}];

希望这会有所帮助:)