代码之家  ›  专栏  ›  技术社区  ›  sander

可选属性与非可选属性?

  •  0
  • sander  · 技术社区  · 7 年前

    假设我想创建一个类型数组 CoolObject 是的。如果某些对象具有 format 有些人不知道?

    // Approach 1
       export interface CoolObject {
         name: string;
         color: string;
         format? string;
        }
    

    // Approach 2
        export interface CoolObject {
         name: string;
         color: string;
         format: string;
        }
    

    在第二种方法中,我可以检查format属性是否有值。

    3 回复  |  直到 7 年前
        1
  •  0
  •   Titian Cernicova-Dragomir    7 年前

    第二个版本告诉编译器,属性将始终存在,因此它绝对不是一个好的方式来表示这是可选的。这个 ? 表示属性的方式是可选的:

    export interface CoolObject {
     name: string;
     color: string;
     format? string;
    }
    

    如果你有 striuctNullChecks typescript甚至会强制您在尝试访问属性时验证该属性是否已定义

        2
  •  0
  •   Akash    7 年前

    如果财产 format 不存在于所有对象中,请使用 以下内容:-

    export interface CoolObject {
      name    : string;
      color   : string;
      format ?: string;
    }
    
        3
  •  0
  •   JanRecker    7 年前

    就像同事们说的,

    export interface CoolObject {
      name    : string;
      color   : string;
      format ?: string;
    }
    

    是最方便的方式。

    如果这是一个非常需要性能的应用程序,我会用

    export interface CoolObject {
          name    : string;
          color   : string;
          format  : string;
        }
    

    并设置 format = undefined 如果不使用的话。

    原因是,javascript编译器优化了“等结构对象” 所以物体

    { 
      name: 'LALALA'
      color: 'blue
    }
    
    { 
      name: 'James Blond'
      color: 'rose'
    }
    

    在结构上是平等的

    { 
      name: 'LALALA'
      color: 'blue
    }
    
    { 
      name: 'James Blond'
      color: 'rose'
      format: 'lowlevel'
    }
    

    不是。

    但是…我们所讨论的优化是非常少的用例所需要的。 因此,我会坚持 format ?: string ,因为它的实现和阅读都非常容易。

    热烈的问候

    推荐文章