错误:未捕获类型错误:无法读取未定义的属性“groupBy”

Posted

技术标签:

【中文标题】错误:未捕获类型错误:无法读取未定义的属性“groupBy”【英文标题】:Error:Uncaught TypeError: Cannot read property 'groupBy' of undefined 【发布时间】:2017-02-11 06:55:28 【问题描述】:

我在尝试创建如下 JSON 结构时遇到问题:

为此,我正在这样做:

    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" )

但在这里我收到一条错误消息:Cannot read property 'groupBy' of undefined

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

任何帮助将不胜感激。

【问题讨论】:

你在 DateMetric 的构造函数中的 console.log(obj) 中看到了什么? 错误是由var b = new DateMetric();引起的。它不使用第一个构造函数,而是使用第三个。 @notgiorgi 但为什么呢?它没有参数化 看到这个问题:***.com/a/12702786/5341953 @notgiorgi 感谢您的参考,但我这里需要通过 b 访问非参数化构造函数。我该怎么做? 【参考方案1】:

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

constructor(obj: any | Date = )  

这样,如果你创建一个实例时没有在构造函数中传递任何数据,基本上你就是在访问。

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

使用您现有的代码,您也可以继续输入 if,如下所示:

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

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

【讨论】:

以上是关于错误:未捕获类型错误:无法读取未定义的属性“groupBy”的主要内容,如果未能解决你的问题,请参考以下文章

未捕获的类型错误:无法读取未定义的属性 toLowerCase

JQuery:未捕获的类型错误:无法读取未定义的属性“调用”

未捕获的类型错误:无法读取文本字段上未定义错误的属性“toLowerCase”

NextJS:未捕获的类型错误:无法读取未定义的属性(读取“属性”)

React - 未捕获的类型错误:无法读取未定义的属性“func”

错误:未捕获类型错误:无法读取未定义的属性“groupBy”