Interface类型的数组



我有一个如下的接口:

export interface testInterface
{
value1: string;
value2:string[];
SubValue:[{}]
}

我正在填充一个类型为testInterface的数组,该数组绑定到一个下拉列表。一切都很好。我希望下拉列表中有"选择一个"作为它的第一个对象。所以我做了以下操作:

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=[];

我在子值的行中得到了此错误:类型"undefined[]"不可分配给类型"[{value1:string;value2:string[];value3…"。类型"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)

heer是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":[
{

正如你所看到的,一个可以有一些子值,每个子也可以有子值,所以我把它定义为对象的数组

default.SubValue的类型为Object的数组,即[Object,Object,Object…],而您将undefined的数组分配给值,即[defined,undefined],因此typescript会给出两种类型不相同的错误。您必须指定它的类型为object才能清除此错误。

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

this.default.value2=[];

this.default.SubValue=[{}];

希望这有帮助:(

因为您正在推入对象,而不是数组。

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

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

创建接口时,其保护对象必须匹配。

换句话说,如果你的情况(只要所有属性都是必需的,你可以用"问号"使它们可选(

因此,当您初始化默认的obejct时,它的所有属性都必须与接口匹配,例如

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

或者制作可选属性并使用您的方式

export interface testInterface
{
value1: string;
value2?:string[];
SubValue?:[{}]
}

综上所述。。。在您的情况下,问题在于这一行this.default.value1

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

相关内容

  • 没有找到相关文章

最新更新