构建时Object类型上不存在Angular 4属性

时间:2017-06-28 19:52:25

标签: angular typescript

我正在使用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> = {};

但它也给了我错误。我需要做些什么来避免这种情况?

8 个答案:

答案 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?