我正在尝试从Array接口获取长度。但是错误如下:
error TS2339: Property 'length' does not exist on type 'ModelSubSystems'.
在这种情况下,如何获取长度。这是我的TS代码:
@Input() subsystems: ModelSubSystems;
resolve({ data: this.subsystems, totalCount: this.subsystems.length }); //error
这是我的界面:
export interface ModelSubSystem {
Id: number;
Name: string;
CreatedBy: string;
CreatedDate: Date;
UpdatedBy: string;
UpdatedDate: Date;
}
export interface ModelSubSystems {
subsystems: Array<ModelSubSystem>; //this is array!!
}
任何人都可以帮助我采取正确的方法。 预先感谢。
答案 0 :(得分:2)
@Input() subsystems: ModelSubSystems
此输入变量将没有长度,因为它是一个interface
,具有一个名称也为subsystems
的属性,并且是一个数组(您试图获取长度的那个)的。
可以使用this.subsystems.subsystems
访问在接口中创建的array属性,而这里的第一个subsystem
是您输入的systemsystem
类型,第二个是该接口中的数组。 / p>
如果您希望subsystems
输入是ModelSubSystem
的数组,而不是创建ModelSubSystems
接口,请直接将此输入声明为and数组,以便您可以访问其长度:
@Input() subsystems: Array<ModelSubSystem>
答案 1 :(得分:1)
您确定this.subsystems
变量已初始化而不是仅声明了吗?
Typescript接口变量默认为undefined
,因此您必须先设置它们,然后才能使用它们/调用它们的方法。
编辑:正如杰夫·鲍曼(Jeff Bowman)指出的那样,您真正需要的是this.subsystems.subsystems.length
。
您还可以将length
属性添加到接口,并让一个类实现所需的行为:
export interface IModelSubSystems {
subsystems : Array<ModelSubSystem>;
length : number;
}
export class ModelSubSystems implements IModelSubSystems {
subsystems = new Array<ModelSubSystem>();
get length() : number {
return this.subsystems.length;
}
}