【问题标题】:Angular Typescript: Assigning class members null or Union Type Operator DifferenceAngular Typescript:分配类成员 null 或联合类型运算符差异
【发布时间】:2020-05-26 10:43:07
【问题描述】:

将事物赋值为 null 或将 Union 类型运算符赋值为 null 有什么区别。无论哪种方式,这两种数据类型都允许类成员为空,所以想了解一下。行为有区别吗?

export class PropertyAddress {
    city?: string = null;
    state?: string = null;
    zipcode?: string = null;


export class PropertyAddress {
    city?: string | null;
    state?: string | null;
    zipcode?: string | null;

问题背景:

想要声明一个类,并确保所有成员都存在并以 null 开头,如果没有定义。有一个问题,即类成员没有出现在调试器中,如果他们没有被预设的话——

【问题讨论】:

    标签: angular typescript angular8


    【解决方案1】:

    这是一个 TypeScript 的东西。

    下面一行

    city?: string = null;
    

    表示您声明了string 类型的属性city初始化 值为null。在这种情况下,如果您在其配置中将--strictNullChecks 标志设置为true,则会引发错误。

    另一方面,下面一行

    city?: string | null
    

    表示您声明了 city 类型为 stringnull 的属性,即使将 --strictNullChecks 标志设置为 true,您也可以将 city 值设为 null

    更多信息 - check out TypeScript 2.0 release notes.

    【解决方案2】:

    其实null是可以赋值给任何类型的

    class test{
        city?: string | null;
        city2?: string = null;
    }
    

    如果你创建一个测试类的实例,城市的值将是未定义的,但城市2的值是空的。

    【讨论】:

    • city 的值,在调试器中也不会出现,第一种情况
    • 是的,在调试器中它不会显示出来。但是在 ts 中你有它。
    • 其实没有初始化是看不到调试器的。
    【解决方案3】:
    1. city?: string = null;
      这里City的类型是字符串,你初始化为null。
    2. city?:string | null;
      我们使用竖线 (|) 来分隔每种类型,所以这里是字符串 | null 是城市的类型,可以是字符串也可以是null。但是这里的city还没有初始化。

    查看高级类型详细解释网址:https://www.typescriptlang.org/docs/handbook/advanced-types.html

    希望对你有帮助。

    【讨论】:

    • 所以第一种情况可以是Both,并且已经初始化,第二种情况可以是Both,但没有初始化,对吗?谢谢
    • 嗨,第一个 'city?: string = null;'已初始化,但第二个 'city?:string |空值;'未初始化。
    猜你喜欢
    • 1970-01-01
    • 2018-11-04
    • 2015-09-03
    • 2023-02-15
    • 1970-01-01
    • 2013-08-03
    • 2019-04-16
    • 2020-08-22
    • 2022-01-05
    相关资源
    最近更新 更多