我的界面如下:
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":[
{
如您所见
,一个可以有一些子值,每个子也可以有子。所以我将其定义为对象数组
答案 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 :(得分:0)
default.SubValue是Object的数组类型,即[Object,Object,Object ...],并且您将undefined的数组分配给值,即[undefined,undefined],因此typescript给出了两种类型的错误不一样。您必须指定它属于对象类型才能清除此错误。
this.default.value1 =“ ----请选择子行业---”;
this.default.value2 = [];
this.default.SubValue = [{}];
希望这会有所帮助:)