当它应该被定义时,"无法读取未定义的属性'name'"

9 浏览
0 Comments

当它应该被定义时,"无法读取未定义的属性'name'"

当尝试在另一个类中初始化一个来自Field类的新变量时,像这样,

Embed类实现了IEmbed接口 {

...

constructor(data : IEmbed) {

...

this.fields = data.fields.map((field) => new Field(field));

...

}

}

我的程序崩溃并显示错误,

this.name = data.name;

^

TypeError: Cannot read property 'name' of undefined

如果在Field的constructor(...)方法中记录data的值,它会打印出没有任何问题的对象(为了保护隐私而更改的值),

{

value: '...message...',

name: '...name...',

inline: false

}

但它仍然崩溃。给Embed构造函数的值是从websocket解析的JSON对象,因此对于Field构造函数也是如此。

0
0 Comments

问题出现的原因是在构造函数中使用了一个未定义的属性,导致无法读取属性值。

解决方法是使用 Partial 类型来定义构造函数的参数类型,并为该参数提供一个默认值。这样做可以避免在使用未定义属性时出现错误。

具体做法如下:

1. 将构造函数的参数类型从 data : any 替换为 data : Partial<Field> = {}

2. 使用 Object.assign() 方法将参数对象的属性值复制到当前对象中。

通过以上操作,可以确保在构造函数中使用属性时,即使属性未定义,也不会出现错误。这样就解决了出现 "Cannot read property 'name' of undefined" 的问题。

参考链接:https://stackoverflow.com/questions/40521447。感谢 Wiktor 提供的指导。

0