如何从Typescript中的数组模型获取长度

时间:2019-06-17 05:15:15

标签: angular typescript angular7 typescript-typings

我正在尝试从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!!
}

任何人都可以帮助我采取正确的方法。 预先感谢。

2 个答案:

答案 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;
  }
}