Typescript Angular:如果未定义(未使用),默认将所有类成员设置为 Null

Posted

技术标签:

【中文标题】Typescript Angular:如果未定义(未使用),默认将所有类成员设置为 Null【英文标题】:Typescript Angular: Default Set All Class Members to Null if Undefined (not used) 【发布时间】:2020-05-23 01:47:04 【问题描述】:

有没有一种简单的方法可以在 Typescript 类中将所有值设置为 null,而无需像这样重复手动复制和粘贴。想要遵循 Dry 原则(不要重复自己)。如果未定义,我希望所有值都自动设置为 null。

export class PropertySitusAddress 

    primaryPropertyMailingAddressId?:number = null;
    propertyId?:number = null;
    propertySitusAddressId?:number = null;
    addressFormatId?:number = null;
    apn?: string = null;
    owner?: string  = null;
    situsAddress?:string = null;
    primaryMailingAddress?:string = null;   
    streetNumber?: string = null;
    situsFromNumber?: string = null;
    situsThroughNumber?: string = null;
    fractional?: string = null;
    predirectional?: string = null;

【问题讨论】:

【参考方案1】:

首先,你的输入是错误的?并不意味着该值可以是null它意味着它可以是undefined

对于您的问题,请考虑 javascript 输出,您实际上希望将所有字段设置为 null,因此无法分配它。但是,您可以简写作业,但我不确定它是否会减少打字:

export class PropertySitusAddress 
    primaryPropertyMailingAddressId?: number | null;
    propertyId?: number | null;
    propertySitusAddressId?: number | null;
    addressFormatId?: number | null;
    apn?: string | null;
    owner?: string | null;
    situsAddress?: string | null;
    primaryMailingAddress?: string | null;
    streetNumber?: string | null;
    situsFromNumber?: string | null;
    situsThroughNumber?: string | null;
    fractional?: string | null;
    predirectional?: string | null;

    constructor() 
        this.primaryPropertyMailingAddressId =
            this.propertyId =
            this.propertySitusAddressId =
            this.addressFormatId =
            this.apn =
            this.owner =
            this.situsAddress =
            this.primaryMailingAddress =
            this.streetNumber =
            this.situsFromNumber =
            this.situsThroughNumber =
            this.fractional =
            this.predirectional = null;
    

我想最好的建议是使用带有multi-cursor functionality (e.g. vscode)的编辑器

【讨论】:

【参考方案2】:

如果您将使用 PropertySitusAddress 作为接口,则属性不能有默认值,请参阅this SO 问题以了解其他解决方法。

如果您将它们设为可选,那么无论如何这些属性将具有未定义的默认值。

如果这些属性没有在接口中使用,那么您可以按照@DoronG 的方式实现它,或者您可以这样做:-

primaryPropertyMailingAddressId: number | null = null;

【讨论】:

什么是 |竖线运算符?试图用谷歌搜索它,得到一些关于管道的东西,但那是 html 是的,在 html 中它用于管道。这意味着您的属性可以是 number 或 null 。仅供参考-typescriptlang.org/docs/handbook/… 嗨,阿南德,接受了答案并给出了分数,也请随意竖起大拇指,谢谢

以上是关于Typescript Angular:如果未定义(未使用),默认将所有类成员设置为 Null的主要内容,如果未能解决你的问题,请参考以下文章

Angular 与 Typescript 和指令中未定义的注入服务

Angular2,TypeScript,如何读取/绑定属性值到组件类(在 ngOnInit 中未定义)[重复]

从Angular TypeScript中来自firestore的数据中获取未定义

错误类型错误:无法读取未定义的属性“切片”---Typescript

Angular 自定义指令范围未按预期更新

Angular 2 从 Jquery 调用 Typescript 函数会导致未捕获的 TypeError