javascript - 错误:Uncaught TypeError: Cannot read property 'groupBy' of undefined

标签 javascript json node.js typescript

当我尝试创建如下所示的 JSON 结构时,我遇到了一个问题:

enter image description here

所以为此我正在这样做:

    class Aggregate{
    average: Number;
    count: String;
    max: Number;
    min: Number;
    total: Number;
    constructor(average,count,max,min,total) {
        this.average= average;
        this.count=count;
        this.max=max;
        this.min= min;
        this.total=total;
    }
}

var average = new Aggregate(43.833333333333336, 6, 90, 10, 263);
var aggregate = new Aggregate(0, undefined, 0, 0, 0);
var startDate=new Date("Tue Jul 05 2016 05:30:00 GMT+0530 (India Standard Time)");
var endDate=new Date("Tue Jul 05 2016 05:30:00 GMT+0530 (India Standard Time)");
interface date{
    aggregate: Aggregate;
    endDate: Date;
    groupBy: String;
    metricType: String;
    quarters: Array<DateMetric>;
    startDate: Date;
    type: String;
    quarter?: Number;
}
class DateMetric{
    aggregate: Aggregate;
    endDate: Date;
    groupBy: String;
    metricType: String;
    quarters: Array<DateMetric>;
    startDate: Date;
    type: String;
    quarter?: Number;

    constructor();
    constructor(obj: date);
    constructor(obj?: any) {
        this.aggregate= aggregate;
        this.endDate=endDate;
        this.groupBy=obj.groupBy;
        this.metricType= obj.metricType;
        this.quarters = obj.quarters;
        this.startDate = startDate;
        this.type = obj.type;
        this.quarter =obj.quarter;

    }    
}
var b = new DateMetric();
b.aggregate = aggregate;
b.quarter=4
b.startDate = startDate;


var a = new DateMetric({ aggregate: average, endDate: endDate, groupBy: "datetime", metricType: "distance_metric", quarters: [b], startDate: startDate, type: "person" })

但这里我收到一条错误消息:无法读取未定义的属性“groupBy”

我不知道为什么会收到错误,因为构造函数中的 obj 应该包含创建对象 a 时传递的对象

如有任何帮助,我们将不胜感激。

最佳答案

像这样定义你的构造函数来消除错误。

constructor(obj: any | Date = {}) { }

这样,如果您创建一个实例而没有在构造函数中传递任何数据,则基本上您正在访问。

{}.groupBy; // ({} aka 'obj' is now defined)

使用现有代码,您也可以继续添加 if,如下所示:

constructor(obj: any | Date) { 
    if(!!obj) {
        // do stuff
    }
}

但是对于上面的示例,我认为第一个解决方案是最好的:)

关于javascript - 错误:Uncaught TypeError: Cannot read property 'groupBy' of undefined,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39829749/

相关文章:

javascript - 在 Yii 中创建一个计数器来添加多个表单

javascript - 意外的标记 ?在 JSON 中使用 JSON.parse 的 x 位置

JavaScript eval() JSON 问题

javascript - js( Node )中的条件语句没有响应

javascript - 未使用已定义的函数调用 Node q Promise 处理程序

node.js - 在 Azure 上启动 Nightmare.js

javascript - worker 、网络或服务;无论如何要访问窗口对象?

javascript - ES6 Javascript 速记仅在属性为真时才创建属性

javascript - Codility CyclicRotation Javascript 解决方案 : Empty array returns an error

json - 分页不适用于 JqGrid 中的 json