Javascript 财产';xxx和x27;不存在于类型';{}';
我今天在我的angular应用程序中遇到了一个奇怪的行为Javascript 财产';xxx和x27;不存在于类型';{}';,javascript,angular,typescript,observable,Javascript,Angular,Typescript,Observable,我今天在我的angular应用程序中遇到了一个奇怪的行为 ERROR in src/main(A,B): error TS2339: Property 'XXX' does not exist on type '{}'. 错误发生在以下代码行 xxx.subscribe(data => { this.var = data.XXX }); 所以基本上我订阅了一个可观测数据,并将数据从可观测数据映射到一个全局变量。我的angular应用程序按预期工作,所以这个错误似乎对应用程序本身
ERROR in src/main(A,B): error TS2339: Property 'XXX' does not exist on type '{}'.
错误发生在以下代码行
xxx.subscribe(data => {
this.var = data.XXX
});
所以基本上我订阅了一个可观测数据,并将数据从可观测数据映射到一个全局变量。我的angular应用程序按预期工作,所以这个错误似乎对应用程序本身没有影响,但我仍然无法找出这里出了什么错。下面是数据的控制台日志:
console.log(data)
//{"XXX": "test"}
Typescript抱怨数据中没有属性,您可以使用任何属性或创建该属性的接口
xxx.subscribe((data:any) => {...}
您将数据实例化为一个对象示例:data={}
。
由于对象没有XXX
属性,因此会出现此错误。
所以解决方案将是data:{XXX:string,YYY:number….}={}
否则,您可以使用数据['XXX']
访问XXX,这是最简单的选项如果改用数据['XXX']
怎么办?键入{}
不包含XXX
属性,这就是原因。可能重复感谢您的回复,这种情况下的最佳做法是什么?请使用接口this@Sajeetharan谢谢你的回复,投票通过了。另一方面,链接上的示例并不清楚。你能给你的答案添加一个例子吗?data['XXX']
应该是这里的答案。不需要接口、模型或特定类型。对一个简单的对象使用这样的东西绝对没有好处。如果需要,可以将数据
重命名为更具体的数据类型。是的,您可以通过这种方式实现所需的行为。但作为一种最佳实践,最好使用接口之类的东西。否则,您将很少获得Typescript的真正好处。作为最佳实践,不要首先返回带有一个属性的数据对象类型。直接返回属性。