JavaScript给已有对象新增属性报不存在及打印未定义错误如何解决
问题排查与解决
第一个报错:TS2339 属性'numOfGuests'不存在
产生原因
这个是TypeScript的类型检查报错。你初始化restaurant对象时没有定义numOfGuests属性,TS会自动推断该对象的类型结构,后续新增不存在于初始结构中的属性就会触发类型不匹配的提示。JavaScript原生语法本身是允许给对象动态新增属性的,这个报错不影响JS代码的实际运行,只是TS的类型校验提示。
解决方法
- 如果你使用的是JavaScript文件(.js后缀):可以在报错行上方加
// @ts-ignore忽略当前行的TS检查,或者在项目的tsconfig.json中关闭针对JS文件的类型校验。 - 如果你使用的是TypeScript文件(.ts后缀):可以在定义
restaurant时提前声明该属性的类型,比如给对象加类型标注const restaurant: {numOfGuests?: number, [key: string]: any} = {...},或者用类型断言const restaurant = {...} as any跳过类型校验。
第二个报错:Uncaught ReferenceError: numOfGuests is not defined
产生原因
numOfGuests不是全局/当前作用域下的独立变量,而是挂载在restaurant对象下的属性,直接访问numOfGuests相当于访问一个从未声明过的变量,自然会触发未定义的报错。
解决方法
打印时指定所属对象即可,修改代码为:
console.log(restaurant.numOfGuests);
内容的提问来源于stack exchange,提问作者Omar AbdElmoniem
相关产品推荐
相关产品推荐

