我正在使用Angular构建一个项目,我使用angular-tool启动了这个项目,当我尝试运行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>
我阅读了一些关于这个的内容,错误是因为我使用类型定义将产品定义为对象,但我没有传递任何属性定义。
我知道我可以定义一个接口,就像我对数组所做的那样,但我不能这样做。我不知道我是不是定义错了,我是这样尝试的:
export interface ProductInterface {
id: Number;
description: String;
title: String;
}
product: Object<ProductInterface> = {};
但它也给了我错误。我需要做些什么来避免这种情况?
9条答案
按热度按时间niknxzdl1#
对于你的第一个例子。在你的html中,你说产品有属性描述(它没有对象类型)
在第二个例子中。您最初将product定义为空对象
它缺少接口的必需字段。因此,您可以删除初始化,
另外,正如其他人所指出的,您不需要Object<>语法
ua4mk5z42#
从我的案子里...
只是添加数据:订阅时的任何都可以正常工作。
当响应数据具有更多的键、值对时,这将很有帮助。(所以创建接口很难/很耗时。)
但最好的做法总是使用接口;)
dly7yett3#
如果属性是动态的(在编译时未知),则可以使用
而不是
axkjgtzd4#
首先,我会简单地使用
product: ProductInterface;
,你甚至不需要初始化它。然后,这可能会修复错误
{{ product?. description }}
6ie5vjzr5#
您必须在OnInit方法中定义请求,控制器实现OnInit接口并定义新方法
假设getProduct()是返回一个observable
prdp8dxp6#
当从服务器请求数据时,使用
any
而不是Object
是安全的,因为我们不知道从服务器返回什么。所以你不需要typecheckie:jslywgbw7#
如果你使用
ng serve
命令,编译成功。梅,你在构建配置上遇到了麻烦
也许你需要修改
className.prod.ts
像className.ts
我的另一个答案有更多的细节:
Angular - How to fix 'property does not exist on type' error?
ajsxfq5m8#
在Angular 16中,其他解决方案都不起作用。
幸运的是,documentation很清楚这一点:可以使用
$any(...)
:wvt8vs2t9#
在我的例子中,它在将我的属性设置为public后工作
所以,只要改变这个
本