首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >类型记录:无法读取属性'long_name‘的null

问类型记录:无法读取属性'long_name‘的null
EN

Stack Overflow用户
提问于 2017-01-30 09:51:45
回答 1查看 4.6K关注 0票数 0

我尝试使用Non-null assertion operator,如代码下面的TypeScript正式文档。所示:

代码语言:javascript
复制
    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才会被访问。但事实并非如此,我明白:

代码语言:javascript
复制
TypeError: Cannot read property 'long_name' of null

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

代码语言:javascript
复制
address.streetNumber = streetNumberComponent && streetNumberComponent.long_name();

我在用:

  • TypeScript:2.0.10
  • 角度:2.3.1
  • 角CLI:1.0.0-beta.24
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-01-30 10:01:03

非空断言操作符仅在类型记录中使用,它在编译过程中无法生存,并且不存在于js代码中。如文件中所述:

那个!在发出的JavaScript代码中,只需删除非空断言操作符。

这个操作符并没有真正检查在它不是空之前是什么,它只是告诉编译器你确信它不是空的一种方式,即使编译器不能推断它本身。

显然,当您运行此代码时,streetNumberComponent是空的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41932931

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档