如果使用--aot,angular 2 cli会返回错误

时间:2017-12-06 00:18:34

标签: angular aot

我有这个代码可以正常工作:

samplesInfo: any = [];
selectedSampleType: Object = {};
selectedSampleTypeForModal: string; // pass type as string to the child component
userFormSubmitted: boolean;

ngOnInit() {

    this.SamplesInfoService.getSamplesInfo()
        .map((res: Response) => res)
        .subscribe(
            data => {
                function hasType(value) { return value.hasOwnProperty('type'); }
                this.samplesInfo = data,
                this.selectedSampleType = this.samplesInfo.filter(hasType)[0],
                this.selectedSampleTypeForModal = this.samplesInfo.filter(hasType)[0].type,
                console.log("OLGA " + this.samplesInfo.filter(hasType)[0]);
                },
            err => { console.log(err); return Observable.of(true); }
    );

}

但是如果我尝试在CLI中使用“--aot”添加到命令中进行构建,那么我有一个错误:“对象”类型上不存在“属性'类型'。”

我在这里做错了什么?

谢谢, 奥尔加

2 个答案:

答案 0 :(得分:0)

我的猜测是这条线是罪魁祸首:

this.selectedSampleTypeForModal = this.samplesInfo.filter(hasType)[0].type

最后的.type - 看起来TypeScript认为该属性不存在。

答案 1 :(得分:0)

问题很可能是由于.subscribe()响应返回空数据集,或者在填充数据之前返回null,从而产生可能的错误。您可以通过首先运行过滤器来确定是否有任何结果来防止在空数据集上发生错误(并且如果进行此检查,希望您的AOT构建不会再失败):

this.SamplesInfoService.getSamplesInfo()
    .map((res: Response) => res)
    .subscribe(
        data => {
            function hasType(value) { return value.hasOwnProperty('type'); }
            this.samplesInfo = data,
            if ( this.samplesInfo.filter(hasType) ) {
              this.selectedSampleType = this.samplesInfo.filter(hasType)[0],
              this.selectedSampleTypeForModal = this.samplesInfo.filter(hasType)[0].type,[0]);
            }
            },
        err => { console.log(err); return Observable.of(true); }
);