javascript - typescript : cannot read property 'long_name' of null

标签 javascript angular typescript typeerror angular-cli

我尝试使用非空断言运算符,如TypeScript official documentation.所示下面是我的代码:

    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;
    }

我预计仅当 streetNumberComponent 不为 null 时才会访问属性 long_name()。但事实并非如此,我得到:

TypeError: Cannot read property 'long_name' of null

请注意,以下代码可以正常工作:

address.streetNumber = streetNumberComponent && streetNumberComponent.long_name();
<小时/>

我正在使用:

  • TypeScript:2.0.10
  • Angular :2.3.1
  • Angular CLI:1.0.0-beta.24

最佳答案

非空断言运算符仅在 typescript 中使用,它不会在编译过程中保留下来,并且不会出现在 js 代码中。如文档中所述:

the ! non-null assertion operator is simply removed in the emitted JavaScript code

该运算符并不真正检查它之前的内容是否不为空,它只是告诉编译器您确定它不为空的一种方式,即使编译器本身无法推断出这一点.

显然,当您运行此代码时,streetNumberComponent 为 null。

关于javascript - typescript : cannot read property 'long_name' of null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41932931/

相关文章:

javascript - aspx页面关闭后如何清除 session ?

javascript - 无法理解 JavaScript 中的以下代码行

angular - Ionic : ion-radio value doesn't work with formBuilder. 名称为 ' ' 的表单控件没有值访问器

Angular 6在对话框关闭后调用函数

javascript - Protractor 在 promise 后找不到相同的元素

javascript - 动态数据的谷歌柱形图随机颜色

javascript - 使用 Ajax 循环追加 Div 类

angular - Angular 2中的错误处理程序和拦截器有什么区别?

reactjs - 如何在 ReactJs 中使用 Typescript 为状态赋值并使用 setState

reactjs - 如何通过 Material UI v5 中的主题更改文本字段等的默认排版?