cel*_*ade 31 typescript angular
我正在使用Angular构建一个项目,我使用angular-cli启动了项目,当我尝试运行时,ng build --prod我不断收到此错误:
类型Object上不存在属性'description'
生成此错误的代码如下:
export class AppComponent {
product: Object = {};
constructor(
private store: StoreService,
private request: RequestService,
) {
this.product = this.request.getProduct(_id);
}
}
<p>{{product.description}}</p>
Run Code Online (Sandbox Code Playgroud)
我正在阅读有关此内容的一些内容,错误是因为我使用类型定义将产品定义为Object,但我没有传递任何属性定义.
我知道我可以定义一个接口,就像我使用数组一样,但是我无法做到.我不知道我是否定义错了,这是我尝试的方式:
export interface ProductInterface {
id: Number;
description: String;
title: String;
}
product: Object<ProductInterface> = {};
Run Code Online (Sandbox Code Playgroud)
但它也给了我错误.我需要做些什么才能避免这种情况?
LLa*_*Lai 19
第一个例子.在您的html中,您说产品具有属性描述(它不在Object类型上)
在你的第二个例子中.您最初将产品定义为空对象
product: ProductInterface = {};
Run Code Online (Sandbox Code Playgroud)
哪个缺少接口的必填字段.所以你可以删除初始化,离开
product: ProductInterface;
Run Code Online (Sandbox Code Playgroud)
另外正如其他人所说,您不需要Object <>语法
从我的情况..
ngOnInit(){
this.product = this.request.getProduct(_id); // who is _id
}
Run Code Online (Sandbox Code Playgroud)
只需添加数据:订阅中的任何内容都可以正常工作。
this.request.getProduct(_id).subscribe((data: any) => {
this.product=data;
});
Run Code Online (Sandbox Code Playgroud)
当响应数据具有更多键值对时,这将很有帮助。(因此创建界面很困难/耗时。)
但最好的做法总是使用接口;)
如果属性是动态的(在编译时未知),您可以使用
someObject['someProperty']
Run Code Online (Sandbox Code Playgroud)
代替
someObject.someProperty
Run Code Online (Sandbox Code Playgroud)
首先,我会简单地使用它product: ProductInterface;,你甚至不需要初始化它。
那么,这可能会解决你的错误{{ product?. description }}
| 归档时间: |
|
| 查看次数: |
56833 次 |
| 最近记录: |