我正在使用Angular构建项目,我使用angular-cli启动了项目,当我尝试运行ng build --prod
时,我不断收到此错误:
财产'描述'在Object
类型中不存在
生成此错误的代码如下:
export class AppComponent {
product: Object = {};
constructor(
private store: StoreService,
private request: RequestService,
) {
this.product = this.request.getProduct(_id);
}
}
<p>{{product.description}}</p>
我正在阅读有关此内容的一些内容,错误是因为我使用类型定义将产品定义为Object,但我没有传递任何属性定义。
我知道我可以定义一个接口,就像我对数组一样,但是我无法做到。我不知道我是否将其定义错了,这就是我尝试的方式:
export interface ProductInterface {
id: Number;
description: String;
title: String;
}
product: Object<ProductInterface> = {};
但它也给了我错误。我需要做些什么来避免这种情况?
答案 0 :(得分:16)
第一个例子。在您的html中,您说产品具有属性描述(它不在Object类型上)
在你的第二个例子中。您最初将产品定义为空对象
product: ProductInterface = {};
缺少界面的必填字段。所以你可以删除初始化,留下
product: ProductInterface;
正如其他人所说,你不需要Object&lt;&gt;语法
答案 1 :(得分:4)
首先,我只想使用product: ProductInterface;
,你甚至不需要初始化它。
然后,这可能会解决您的错误{{ product?. description }}
答案 2 :(得分:2)
从我的情况来看。
ngOnInit(){
this.product = this.request.getProduct(_id); // who is _id
}
只需在订阅中添加 data:any 即可。
this.request.getProduct(_id).subscribe((data: any) => {
this.product=data;
});
当响应数据具有更多键,值对时,这将很有帮助。 (因此创建界面非常困难/耗时。)
答案 3 :(得分:0)
您必须在OnInit方法中定义请求,您的控制器实现OnInit接口并定义新方法
ngOnInit(){
this.product = this.request.getProduct(_id); // who is _id
}
假设getProduct()是返回可观察
的http请求this.request.getProduct(_id).subscribe((data) => {
this.product=data;
});
答案 4 :(得分:0)
就我而言,在将我的属性设置为 public
之后,它才有效所以,只需改变这个
export interface ProductInterface {
id: Number;
description: String;
title: String;
}
到这个
export interface ProductInterface {
public id: Number;
public description: String;
public title: String;
}
答案 5 :(得分:0)
从服务器请求数据时,使用any
而不是Object
是安全的,因为我们不知道将从服务器返回什么。因此,您无需进行类型检查,即:
export class AppComponent {
product: any;
constructor(
private store: StoreService,
private request: RequestService,
) {
this.product = this.request.getProduct(_id);
}
}
答案 6 :(得分:0)
如果该属性是动态的(在编译时未知),则可以使用
someObject['someProperty']
代替
someObject.someProperty
答案 7 :(得分:0)
如果您使用命令 ng serve
并构建成功。
可能,您在使用 build configuration
时遇到了麻烦也许你需要修改 className.prod.ts
之类的 className.ts
我的另一个答案有更多细节:
Angular - How to fix 'property does not exist on type' error?