我尝试使用Non-null assertion operator,如代码下面的TypeScript正式文档。所示:
let streetNumberComponent = this.getAddressComponent(addressComponents, 'street_number');
address.streetNumber = streetNumberComponent!.long_name();
...
public getAddressComponent(addressComponents: Array<any>, type: string): any {
addressComponents.filter( component => {
let types : Array<string> = component.types;
if(_.includes(types, type)) {
return component;
}
});
return null;
}我预计只有当long_name()不是null时,属性null才会被访问。但事实并非如此,我明白:
TypeError: Cannot read property 'long_name' of null请注意,以下代码工作正常:
address.streetNumber = streetNumberComponent && streetNumberComponent.long_name();我在用:
发布于 2017-01-30 10:01:03
非空断言操作符仅在类型记录中使用,它在编译过程中无法生存,并且不存在于js代码中。如文件中所述:
那个!在发出的JavaScript代码中,只需删除非空断言操作符。
这个操作符并没有真正检查在它不是空之前是什么,它只是告诉编译器你确信它不是空的一种方式,即使编译器不能推断它本身。
显然,当您运行此代码时,streetNumberComponent是空的。
https://stackoverflow.com/questions/41932931
复制相似问题